mixins.py
3.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import logging
from django.contrib.auth.models import AnonymousUser
from rest_framework.generics import GenericAPIView
from common.exceptions import (
NeedLoginException,
InvalidParamsException,
InternalErrorException,
ObjectNotExitException,
AsyncWaitException,
NoPermissionException,
IllegalOperationException)
class GenericExceptionMixin:
def need_login(self, msg='need login'):
raise NeedLoginException(msg)
def invalid_params(self, msg='invalid params'):
raise InvalidParamsException(msg)
def internal_error(self, msg='internal error'):
raise InternalErrorException(msg)
def object_not_exit(self, msg='object not exit'):
raise ObjectNotExitException(msg)
def async_wait(self, msg='async wait'):
raise AsyncWaitException(msg)
def no_permission(self, msg='no permission'):
raise NoPermissionException(msg)
def illegal_operation(self, msg='illegal operation'):
raise IllegalOperationException(msg)
class LoggerMixin:
running_log = logging.getLogger('running')
exception_log = logging.getLogger('exception')
cronjob_log = logging.getLogger('cronjob')
folder_log = logging.getLogger('folder')
bs_log = logging.getLogger('bs')
license_log = logging.getLogger('license')
idcard_log = logging.getLogger('idcard')
class GenericView(LoggerMixin, GenericExceptionMixin, GenericAPIView):
need_print_logger = True
def print_logger(self, request):
parameters = getattr(request, request.method, {})
if not parameters:
parameters = getattr(request, 'data', {})
if not parameters:
parameters = {}
parameters_string = ''
for key, value in parameters.items():
parameters_string += '[%s=%s] ' % (key, value)
for key, value in self.kwargs.items():
parameters_string += '[%s=%s] ' % (key, value)
if request.user and not isinstance(request.user, AnonymousUser):
user_id = request.user.id
else:
user_id = 0
self.running_log.info('[%s_%s_request] with parameters [user_id=%s] %s'
% (self.__class__.__name__, request.method,
user_id, parameters_string))
def dispatch(self, request, *args, **kwargs):
"""
`.dispatch()` is pretty much the same as Django's regular dispatch,
but with extra hooks for startup, finalize, and exception handling.
"""
self.args = args
self.kwargs = kwargs
request = self.initialize_request(request, *args, **kwargs)
self.request = request
self.headers = self.default_response_headers # deprecate?
try:
self.initial(request, *args, **kwargs)
# Get the appropriate handler method
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),
self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
if self.need_print_logger:
self.print_logger(request)
response = handler(request, *args, **kwargs)
except Exception as exc:
response = self.handle_exception(exc)
self.response = self.finalize_response(
request, response, *args, **kwargs)
return self.response
def get_object(self):
return None