UserController.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import logging
  4. import time
  5. from django.db.models import Q
  6. from django.utils.decorators import method_decorator
  7. from django.views import View
  8. from django.views.decorators.csrf import csrf_exempt
  9. from Model.models import UserModel
  10. from Object.ResponseObject import ResponseObject
  11. from Object.TokenObject import TokenObject
  12. from Service.ModelService import ModelService
  13. class UserView(View):
  14. @method_decorator(csrf_exempt)
  15. def dispatch(self, request, *args, **kwargs):
  16. return super(UserView, self).dispatch(request, *args, **kwargs)
  17. def get(self, request, *args, **kwargs):
  18. # print('get')
  19. request.encoding = 'utf-8'
  20. request_dict = request.GET
  21. operation = kwargs.get('operation')
  22. return self.validation(request_dict, operation)
  23. def post(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. request_dict = request.POST
  26. operation = kwargs.get('operation')
  27. return self.validation(request_dict, operation)
  28. def validation(self, request_dict, operation):
  29. if operation == 'login':
  30. return self.login(request_dict)
  31. elif operation == 'logout':
  32. return self.logout(request_dict)
  33. else:
  34. token = request_dict.get('token', None)
  35. token = TokenObject(token)
  36. response = ResponseObject()
  37. if token.code != 0:
  38. return response.json(token.code)
  39. if operation == 'query':
  40. return self.do_query(request_dict)
  41. elif operation == 'modify':
  42. return self.do_modify_password(request_dict)
  43. elif operation == 'list':
  44. return self.do_list(request_dict)
  45. elif operation == 'adminAdd':
  46. return self.do_admin_add(token.userID, request_dict, response)
  47. elif operation == 'adminDelete':
  48. return self.do_admin_delete(token.userID, request_dict, response)
  49. elif operation == 'adminUpdate':
  50. return self.do_admin_update(token.userID, request_dict, response)
  51. elif operation == 'adminReset':
  52. return self.do_admin_reset(token.userID, request_dict, response)
  53. else:
  54. return ResponseObject().json(309)
  55. def login(self, request_dict):
  56. djangoLogger = logging.getLogger('info')
  57. djangoLogger.info('进入登录接口')
  58. username = request_dict.get('username', None)
  59. password = request_dict.get('password', None)
  60. response = ResponseObject()
  61. if username is None or password is None:
  62. return response.json(444)
  63. try:
  64. user = UserModel.objects.filter(username=username)
  65. if not user.exists():
  66. return response.json(99)
  67. if user[0].password != password:
  68. return response.json(99)
  69. else:
  70. token = TokenObject()
  71. res = token.generate({'userID': user[0].id})
  72. res['permission'] = user[0].permission
  73. res['username'] = user[0].username
  74. user[0].online = 1
  75. update = {
  76. 'online': 1
  77. }
  78. user.update(**update)
  79. return response.json(0, res)
  80. except Exception as e:
  81. djangoLogger.info('登录接口异常:{}'.format(repr(e)))
  82. return response.json(99)
  83. def do_query(self, request_dict):
  84. # print('do_query')
  85. token = TokenObject(request_dict.get('token', None))
  86. # page = request_dict.get('page', None)
  87. # line = request_dict.get('line', None)
  88. # username = request_dict.get('username', None)
  89. response = ResponseObject()
  90. if token.code != 0:
  91. return response.json(token.code)
  92. # if username:
  93. # user_qs = UserModel.objects.filter(username__icontains=username)
  94. # if user_qs.exists():
  95. # users = list(user_qs.values('username'))
  96. # return response.json(0, {'data': users})
  97. # else:
  98. # return response.json(0, {'data': []})
  99. # elif page and line:
  100. # print('query_page')
  101. # user_qs = UserModel.objects.filter(id=token.userID)
  102. # if user_qs.exists():
  103. # user = user_qs[0]
  104. # if user.permission == '0':
  105. # return self.do_query_pagination(int(page), int(line), response)
  106. # else:
  107. # return response.json(404)
  108. # else:
  109. # return response.json(9)
  110. user_qs = UserModel.objects.filter(~Q(Q(permission='0'))).values('id', 'username')
  111. return response.json(0, {'data': list(user_qs)})
  112. def do_query_pagination(self, page, line, response):
  113. # print('query start')
  114. user_qs = UserModel.objects.filter().values()
  115. if user_qs.exists():
  116. count = user_qs.count()
  117. start = (page - 1) * line
  118. end = start + line
  119. users = list(user_qs[start:end])
  120. # print('query end')
  121. return response.json(0, {'count': count, 'data': users})
  122. else:
  123. return response.json(0, {'count': 0, 'data': []})
  124. def do_modify_password(self, request_dict):
  125. token = request_dict.get('token', None)
  126. old_password = request_dict.get('oldPassword', None)
  127. new_password = request_dict.get('newPassword', None)
  128. token = TokenObject(token)
  129. response = ResponseObject()
  130. if token.code != 0:
  131. return response.json(token.code)
  132. if old_password and new_password:
  133. user_qs = UserModel.objects.filter(id=token.userID)
  134. if user_qs.exists():
  135. if user_qs[0].password != old_password:
  136. return response.json(47)
  137. user = {
  138. 'password': new_password
  139. }
  140. user_qs.update(**user)
  141. return response.json(0)
  142. else:
  143. return response.json(9)
  144. else:
  145. return response.json(444)
  146. def logout(self, request_dict):
  147. token = request_dict.get('token', None)
  148. token = TokenObject(token)
  149. response = ResponseObject()
  150. if token.code != 0:
  151. return response.json(0)
  152. user_qs = UserModel.objects.filter(id=token.userID)
  153. if user_qs.exists():
  154. user = {
  155. 'online': 0
  156. }
  157. user_qs.update(**user)
  158. return response.json(0)
  159. else:
  160. return response.json(0)
  161. def do_list(self, request_dict):
  162. token = request_dict.get('token', None)
  163. response = ResponseObject()
  164. token = TokenObject(token)
  165. if token.code != 0:
  166. return response.json(token.code)
  167. page = request_dict.get('page', None)
  168. line = request_dict.get('limit', None)
  169. if page and line:
  170. user_qs = UserModel.objects.filter()
  171. res = {
  172. 'count': user_qs.count(),
  173. 'data': []
  174. }
  175. if user_qs.exists():
  176. page = int(page)
  177. line = int(line)
  178. start = (page - 1) * line
  179. end = start + line
  180. user_qs = user_qs[start:end].values('id', 'username', 'permission', 'phone', 'login_time', 'add_time')
  181. res['data'] = list(user_qs)
  182. return response.json(0, res)
  183. else:
  184. return response.json(444)
  185. def do_admin_add(self, userID, request_dict, response):
  186. perm = ModelService.check_perm(userID, 0)
  187. if not perm:
  188. return response.json(309)
  189. print(request_dict)
  190. username = request_dict.get('username', None)
  191. password = request_dict.get('password', None)
  192. phone = request_dict.get('phone', None)
  193. role = request_dict.get('role', None)
  194. if username and password and role:
  195. user = UserModel()
  196. user.username = username
  197. user.password = password
  198. user.permission = role
  199. user.phone = phone
  200. user.add_time = int(time.time())
  201. user.save()
  202. return response.json(0)
  203. else:
  204. return response.json(444)
  205. def do_admin_delete(self, userID, request_dict, response):
  206. perm = ModelService.check_perm(userID, 0)
  207. if not perm:
  208. return response.json(309)
  209. username = request_dict.get('username', None)
  210. if username:
  211. user_qs = UserModel.objects.filter(username=username)
  212. if user_qs.exists():
  213. user_qs.delete()
  214. return response.json(0)
  215. else:
  216. return response.json(9)
  217. else:
  218. return response.json(444)
  219. def do_admin_update(self, userID, request_dict, response):
  220. perm = ModelService.check_perm(userID, 0)
  221. if not perm:
  222. return response.json(309)
  223. username = request_dict.get('username', None)
  224. role = request_dict.get('role', None)
  225. password = request_dict.get('password', None)
  226. phone = request_dict.get('phone', None)
  227. if username:
  228. update_data = {}
  229. if role:
  230. update_data['permission'] = role
  231. if password:
  232. update_data['password'] = password
  233. if phone:
  234. update_data['phone'] = phone
  235. UserModel.objects.filter(username=username).update(**update_data)
  236. return response.json(0)
  237. else:
  238. return response.json(444)
  239. def do_admin_reset(self, userID, request_dict, response):
  240. perm = ModelService.check_perm(userID, 0)
  241. if not perm:
  242. return response.json(309)
  243. username = request_dict.get('username', None)
  244. if username:
  245. user_qs = UserModel.objects.filter(username=username)
  246. if user_qs.exists():
  247. user_qs.update(password='123456')
  248. return response.json(0)
  249. else:
  250. return response.json(9)
  251. else:
  252. return response.json(444)