#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import traceback from django.http import HttpResponse from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from django.views.generic.base import View from Ansjer.config import BASE_DIR from Model.models import FAQModel from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject from var_dump import var_dump class FAQUploadView(View): @method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): return super(FAQUploadView, self).dispatch(request, *args, **kwargs) def get(self, request, *args, **kwargs): request.encoding = 'utf-8' request_dict = request.GET fileName = request.FILES.get('fileName', None) return self.validate(fileName, request_dict) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' request_dict = request.POST fileName = request.FILES.get('fileName', None) return self.validate(fileName, request_dict) def validate(self, fileName, request_dict): token = TokenObject(request_dict.get('token', None)) response = ResponseObject() if token.code != 0: return response.json(token.code) # own_permission = ModelService.check_perm(userID=token.userID, permID=120) # if own_permission is not True: # return response.json(404) try: path = '/'.join((BASE_DIR, 'static/FAQImages')).replace('\\', '/') + '/' if not os.path.exists(path): os.makedirs(path) file_name = path + str(fileName) if os.path.exists(file_name): os.remove(file_name) destination = open(file_name, 'wb+') for chunk in fileName.chunks(): destination.write(chunk) destination.close() else: file_name = path + str(fileName) if os.path.exists(file_name): os.remove(file_name) destination = open(file_name, 'wb+') for chunk in fileName.chunks(): destination.write(chunk) destination.close() except Exception as e: errorInfo = traceback.format_exc() print('上传文件错误: %s' % errorInfo) return response.json(700, {'details': repr(e)}) else: index = file_name.find('static/') filePath = file_name[index:] # filePath = SERVER_DOMAIN + 'faq/image/' + filePath filePath = "http://192.168.136.35:8000/" + 'faq/image/' + filePath return response.json(0, {'filePath': filePath}) class getFAQImage(View): def post(self, request, *args, **kwargs): request.encoding = 'utf-8' filePath = kwargs.get('filePath', None) filePath.encode(encoding='utf-8', errors='strict') response = ResponseObject() return self.getFile(filePath, response) def get(self, request, *args, **kwargs): request.encoding = 'gb2312' filePath = kwargs.get('filePath', None) response = ResponseObject() filePath.encode(encoding='gb2312', errors='strict') return self.getFile(filePath, response) def getFile(self, filePath, response): if filePath: pass else: return response.json(800) fullPath = os.path.join(BASE_DIR, filePath).replace('\\', '/') var_dump(fullPath) if os.path.isfile(fullPath): try: Imagedata = open(fullPath, 'rb').read() except Exception as e: return response.json(906, repr(e)) else: return HttpResponse(Imagedata, content_type="image/jpeg") else: return response.json(907) class FAQView(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(FAQView, self).dispatch(*args, **kwargs) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' request_dict = request.POST operation = kwargs.get('operation', None) return self.validate(request_dict, operation) def get(self, request, *args, **kwargs): request.encoding = 'utf-8' request_dict = request.GET operation = kwargs.get('operation', None) return self.validate(request_dict, operation) def validate(self, request_dict, operation): token = TokenObject(request_dict.get('token', None)) response = ResponseObject() if token.code != 0: return response.json(token.code) if operation == 'add': return self.do_add(token.userID, request_dict, response) elif operation == 'query': return self.do_query(token.userID, request_dict, response) elif operation == 'update': return self.do_update(token.userID, request_dict, response) elif operation == 'delete': return self.do_delete(token.userID, request_dict, response) else: return response.json(404) def do_add(self, userID, request_dict, response): # own_permission = ModelService.check_perm(userID=userID, permID=120) # if own_permission is not True: # return response.json(404) title = request_dict.get('title', None) content = request_dict.get('content', None) if title and content: FAQModel.objects.create(**{ 'title': title, 'content': content }) return response.json(0) else: return response.json(444) def do_query(self, userID, request_dict, response): page = request_dict.get('page', None) line = request_dict.get('line', None) search_key = request_dict.get('search_key', None) if page and line: if search_key: # own_permission = ModelService.check_perm(userID=userID, permID=110) # if own_permission is not True: # return response.json(404) faq_qs = FAQModel.objects.filter(title__contains=search_key) else: # own_permission = ModelService.check_perm(userID=userID, permID=100) # if own_permission is not True: # return response.json(404) faq_qs = FAQModel.objects.filter() if not faq_qs.exists(): return response.json(0, []) page = int(page) line = int(line) start = (page - 1) * line end = start + line faq_qs = faq_qs.values()[start:end] return response.json(0, list(faq_qs)) else: return response.json(444) def do_update(self, userID, request_dict, response): # own_permission = ModelService.check_perm(userID=userID, permID=130) # if own_permission is not True: # return response.json(404) id = request_dict.get('id', None) title = request_dict.get('title', None) content = request_dict.get('content', None) if id: data = {} if title: data['title'] = title if content: data['content'] = content FAQModel.objects.filter(id=id).update(**data) return response.json(0) else: return response.json(444) def do_delete(self, userID, request_dict, response): # own_permission = ModelService.check_perm(userID=userID, permID=140) # if own_permission is not True: # return response.json(404) id = request_dict.get('id', None) if id: try: FAQModel.objects.filter(id=id).delete() except Exception as e: print(e) return response.json(173) else: return response.json(0) else: return response.json(444)