import enum from django.http import JsonResponse, HttpResponse from .named_enum import NamedEnum def res_content(meta_status, msg, data=None): res = {'code': meta_status, 'message': msg} if data is not None: res['data'] = data return res @enum.unique class MetaStatus(NamedEnum): SUCCESS = (0, 'success') NEED_LOGIN = (1, 'need login') INVALID_PARAMS = (2, 'invalid params') INTERNAL_ERROR = (3, 'internal error') NOT_EXIST = (4, 'object not exist') ASYNC_WAIT = (5, 'async wait') NO_PERMISSION = (6, 'no permission') ILLEGAL_OPERATION = (7, 'illegal operation') NEED_UPDATE = (8, 'need update') class APIResponse(JsonResponse): def __init__(self, meta_status, data=None, msg='', json_dumps_params=None, **kwargs): data = res_content(meta_status, msg, data) json_dumps_params = json_dumps_params or {'ensure_ascii': False} kwargs['json_dumps_params'] = json_dumps_params super().__init__(data, **kwargs) def ok(**kwargs): return APIResponse(MetaStatus.SUCCESS.value, msg=MetaStatus.SUCCESS.verbose_name, **kwargs) def error_msg(msg='internal error', **kwargs): return APIResponse(MetaStatus.INTERNAL_ERROR.value, msg=msg, **kwargs) def need_update(**kwargs): return APIResponse(MetaStatus.NEED_UPDATE.value, msg=MetaStatus.NEED_UPDATE.verbose_name, **kwargs) def excel_response(file_name, io_content): http_response = HttpResponse(content_type="application/vnd.ms-excel") http_response['Content-Disposition'] = 'attachment;filename={0}.xlsx'.format(file_name) http_response.write(io_content.getvalue()) return http_response