FAQController.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import traceback
  5. from django.http import HttpResponse
  6. from django.utils.decorators import method_decorator
  7. from django.views.decorators.csrf import csrf_exempt
  8. from django.views.generic.base import View
  9. from Ansjer.config import BASE_DIR
  10. from Model.models import FAQModel
  11. from Object.ResponseObject import ResponseObject
  12. from Object.TokenObject import TokenObject
  13. from var_dump import var_dump
  14. class FAQUploadView(View):
  15. @method_decorator(csrf_exempt)
  16. def dispatch(self, request, *args, **kwargs):
  17. return super(FAQUploadView, self).dispatch(request, *args, **kwargs)
  18. def get(self, request, *args, **kwargs):
  19. request.encoding = 'utf-8'
  20. request_dict = request.GET
  21. fileName = request.FILES.get('fileName', None)
  22. return self.validate(fileName, request_dict)
  23. def post(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. request_dict = request.POST
  26. fileName = request.FILES.get('fileName', None)
  27. return self.validate(fileName, request_dict)
  28. def validate(self, fileName, request_dict):
  29. token = TokenObject(request_dict.get('token', None))
  30. response = ResponseObject()
  31. if token.code != 0:
  32. return response.json(token.code)
  33. # own_permission = ModelService.check_perm(userID=token.userID, permID=120)
  34. # if own_permission is not True:
  35. # return response.json(404)
  36. try:
  37. path = '/'.join((BASE_DIR, 'static/FAQImages')).replace('\\', '/') + '/'
  38. if not os.path.exists(path):
  39. os.makedirs(path)
  40. file_name = path + str(fileName)
  41. if os.path.exists(file_name):
  42. os.remove(file_name)
  43. destination = open(file_name, 'wb+')
  44. for chunk in fileName.chunks():
  45. destination.write(chunk)
  46. destination.close()
  47. else:
  48. file_name = path + str(fileName)
  49. if os.path.exists(file_name):
  50. os.remove(file_name)
  51. destination = open(file_name, 'wb+')
  52. for chunk in fileName.chunks():
  53. destination.write(chunk)
  54. destination.close()
  55. except Exception as e:
  56. errorInfo = traceback.format_exc()
  57. print('上传文件错误: %s' % errorInfo)
  58. return response.json(700, {'details': repr(e)})
  59. else:
  60. index = file_name.find('static/')
  61. filePath = file_name[index:]
  62. # filePath = SERVER_DOMAIN + 'faq/image/' + filePath
  63. filePath = "http://192.168.136.35:8000/" + 'faq/image/' + filePath
  64. return response.json(0, {'filePath': filePath})
  65. class getFAQImage(View):
  66. def post(self, request, *args, **kwargs):
  67. request.encoding = 'utf-8'
  68. filePath = kwargs.get('filePath', None)
  69. filePath.encode(encoding='utf-8', errors='strict')
  70. response = ResponseObject()
  71. return self.getFile(filePath, response)
  72. def get(self, request, *args, **kwargs):
  73. request.encoding = 'gb2312'
  74. filePath = kwargs.get('filePath', None)
  75. response = ResponseObject()
  76. filePath.encode(encoding='gb2312', errors='strict')
  77. return self.getFile(filePath, response)
  78. def getFile(self, filePath, response):
  79. if filePath:
  80. pass
  81. else:
  82. return response.json(800)
  83. fullPath = os.path.join(BASE_DIR, filePath).replace('\\', '/')
  84. var_dump(fullPath)
  85. if os.path.isfile(fullPath):
  86. try:
  87. Imagedata = open(fullPath, 'rb').read()
  88. except Exception as e:
  89. return response.json(906, repr(e))
  90. else:
  91. return HttpResponse(Imagedata, content_type="image/jpeg")
  92. else:
  93. return response.json(907)
  94. class FAQView(View):
  95. @method_decorator(csrf_exempt)
  96. def dispatch(self, *args, **kwargs):
  97. return super(FAQView, self).dispatch(*args, **kwargs)
  98. def post(self, request, *args, **kwargs):
  99. request.encoding = 'utf-8'
  100. request_dict = request.POST
  101. operation = kwargs.get('operation', None)
  102. return self.validate(request_dict, operation)
  103. def get(self, request, *args, **kwargs):
  104. request.encoding = 'utf-8'
  105. request_dict = request.GET
  106. operation = kwargs.get('operation', None)
  107. return self.validate(request_dict, operation)
  108. def validate(self, request_dict, operation):
  109. token = TokenObject(request_dict.get('token', None))
  110. response = ResponseObject()
  111. if token.code != 0:
  112. return response.json(token.code)
  113. if operation == 'add':
  114. return self.do_add(token.userID, request_dict, response)
  115. elif operation == 'query':
  116. return self.do_query(token.userID, request_dict, response)
  117. elif operation == 'update':
  118. return self.do_update(token.userID, request_dict, response)
  119. elif operation == 'delete':
  120. return self.do_delete(token.userID, request_dict, response)
  121. else:
  122. return response.json(404)
  123. def do_add(self, userID, request_dict, response):
  124. # own_permission = ModelService.check_perm(userID=userID, permID=120)
  125. # if own_permission is not True:
  126. # return response.json(404)
  127. title = request_dict.get('title', None)
  128. content = request_dict.get('content', None)
  129. if title and content:
  130. FAQModel.objects.create(**{
  131. 'title': title,
  132. 'content': content
  133. })
  134. return response.json(0)
  135. else:
  136. return response.json(444)
  137. def do_query(self, userID, request_dict, response):
  138. page = request_dict.get('page', None)
  139. line = request_dict.get('line', None)
  140. search_key = request_dict.get('search_key', None)
  141. if page and line:
  142. if search_key:
  143. # own_permission = ModelService.check_perm(userID=userID, permID=110)
  144. # if own_permission is not True:
  145. # return response.json(404)
  146. faq_qs = FAQModel.objects.filter(title__contains=search_key)
  147. else:
  148. # own_permission = ModelService.check_perm(userID=userID, permID=100)
  149. # if own_permission is not True:
  150. # return response.json(404)
  151. faq_qs = FAQModel.objects.filter()
  152. if not faq_qs.exists():
  153. return response.json(0, [])
  154. page = int(page)
  155. line = int(line)
  156. start = (page - 1) * line
  157. end = start + line
  158. faq_qs = faq_qs.values()[start:end]
  159. return response.json(0, list(faq_qs))
  160. else:
  161. return response.json(444)
  162. def do_update(self, userID, request_dict, response):
  163. # own_permission = ModelService.check_perm(userID=userID, permID=130)
  164. # if own_permission is not True:
  165. # return response.json(404)
  166. id = request_dict.get('id', None)
  167. title = request_dict.get('title', None)
  168. content = request_dict.get('content', None)
  169. if id:
  170. data = {}
  171. if title:
  172. data['title'] = title
  173. if content:
  174. data['content'] = content
  175. FAQModel.objects.filter(id=id).update(**data)
  176. return response.json(0)
  177. else:
  178. return response.json(444)
  179. def do_delete(self, userID, request_dict, response):
  180. # own_permission = ModelService.check_perm(userID=userID, permID=140)
  181. # if own_permission is not True:
  182. # return response.json(404)
  183. id = request_dict.get('id', None)
  184. if id:
  185. try:
  186. FAQModel.objects.filter(id=id).delete()
  187. except Exception as e:
  188. print(e)
  189. return response.json(173)
  190. else:
  191. return response.json(0)
  192. else:
  193. return response.json(444)