UserController.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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. username = request_dict.get('username', None)
  57. password = request_dict.get('password', None)
  58. response = ResponseObject()
  59. if username is None or password is None:
  60. return response.json(444)
  61. try:
  62. user = UserModel.objects.filter(username=username)
  63. if not user.exists():
  64. return response.json(99)
  65. if user[0].password != password:
  66. return response.json(99)
  67. else:
  68. token = TokenObject()
  69. res = token.generate({'userID': user[0].id})
  70. res['permission'] = user[0].permission
  71. res['username'] = user[0].username
  72. user[0].online = 1
  73. update = {
  74. 'online': 1
  75. }
  76. user.update(**update)
  77. return response.json(0, res)
  78. except Exception as e:
  79. djangoLogger = logging.getLogger('django')
  80. djangoLogger.exception(repr(e))
  81. return response.json(99)
  82. def do_query(self, request_dict):
  83. # print('do_query')
  84. token = TokenObject(request_dict.get('token', None))
  85. # page = request_dict.get('page', None)
  86. # line = request_dict.get('line', None)
  87. # username = request_dict.get('username', None)
  88. response = ResponseObject()
  89. if token.code != 0:
  90. return response.json(token.code)
  91. # if username:
  92. # user_qs = UserModel.objects.filter(username__icontains=username)
  93. # if user_qs.exists():
  94. # users = list(user_qs.values('username'))
  95. # return response.json(0, {'data': users})
  96. # else:
  97. # return response.json(0, {'data': []})
  98. # elif page and line:
  99. # print('query_page')
  100. # user_qs = UserModel.objects.filter(id=token.userID)
  101. # if user_qs.exists():
  102. # user = user_qs[0]
  103. # if user.permission == '0':
  104. # return self.do_query_pagination(int(page), int(line), response)
  105. # else:
  106. # return response.json(404)
  107. # else:
  108. # return response.json(9)
  109. user_qs = UserModel.objects.filter(~Q(Q(permission='0'))).values('id', 'username')
  110. return response.json(0, {'data': list(user_qs)})
  111. def do_query_pagination(self, page, line, response):
  112. # print('query start')
  113. user_qs = UserModel.objects.filter().values()
  114. if user_qs.exists():
  115. count = user_qs.count()
  116. start = (page - 1) * line
  117. end = start + line
  118. users = list(user_qs[start:end])
  119. # print('query end')
  120. return response.json(0, {'count': count, 'data': users})
  121. else:
  122. return response.json(0, {'count': 0, 'data': []})
  123. def do_modify_password(self, request_dict):
  124. token = request_dict.get('token', None)
  125. old_password = request_dict.get('oldPassword', None)
  126. new_password = request_dict.get('newPassword', None)
  127. token = TokenObject(token)
  128. response = ResponseObject()
  129. if token.code != 0:
  130. return response.json(token.code)
  131. if old_password and new_password:
  132. user_qs = UserModel.objects.filter(id=token.userID)
  133. if user_qs.exists():
  134. if user_qs[0].password != old_password:
  135. return response.json(47)
  136. user = {
  137. 'password': new_password
  138. }
  139. user_qs.update(**user)
  140. return response.json(0)
  141. else:
  142. return response.json(9)
  143. else:
  144. return response.json(444)
  145. def logout(self, request_dict):
  146. token = request_dict.get('token', None)
  147. token = TokenObject(token)
  148. response = ResponseObject()
  149. if token.code != 0:
  150. return response.json(0)
  151. user_qs = UserModel.objects.filter(id=token.userID)
  152. if user_qs.exists():
  153. user = {
  154. 'online': 0
  155. }
  156. user_qs.update(**user)
  157. return response.json(0)
  158. else:
  159. return response.json(0)
  160. def do_list(self, request_dict):
  161. token = request_dict.get('token', None)
  162. response = ResponseObject()
  163. token = TokenObject(token)
  164. if token.code != 0:
  165. return response.json(token.code)
  166. page = request_dict.get('page', None)
  167. line = request_dict.get('limit', None)
  168. if page and line:
  169. user_qs = UserModel.objects.filter()
  170. res = {
  171. 'count': user_qs.count(),
  172. 'data': []
  173. }
  174. if user_qs.exists():
  175. page = int(page)
  176. line = int(line)
  177. start = (page - 1) * line
  178. end = start + line
  179. user_qs = user_qs[start:end].values('id', 'username', 'permission', 'phone', 'login_time', 'add_time')
  180. res['data'] = list(user_qs)
  181. return response.json(0, res)
  182. else:
  183. return response.json(444)
  184. def do_admin_add(self, userID, request_dict, response):
  185. perm = ModelService.check_perm(userID, 0)
  186. if not perm:
  187. return response.json(309)
  188. print(request_dict)
  189. username = request_dict.get('username', None)
  190. password = request_dict.get('password', None)
  191. phone = request_dict.get('phone', None)
  192. role = request_dict.get('role', None)
  193. if username and password and role:
  194. user = UserModel()
  195. user.username = username
  196. user.password = password
  197. user.permission = role
  198. user.phone = phone
  199. user.add_time = int(time.time())
  200. user.save()
  201. return response.json(0)
  202. else:
  203. return response.json(444)
  204. def do_admin_delete(self, userID, request_dict, response):
  205. perm = ModelService.check_perm(userID, 0)
  206. if not perm:
  207. return response.json(309)
  208. username = request_dict.get('username', None)
  209. if username:
  210. user_qs = UserModel.objects.filter(username=username)
  211. if user_qs.exists():
  212. user_qs.delete()
  213. return response.json(0)
  214. else:
  215. return response.json(9)
  216. else:
  217. return response.json(444)
  218. def do_admin_update(self, userID, request_dict, response):
  219. perm = ModelService.check_perm(userID, 0)
  220. if not perm:
  221. return response.json(309)
  222. username = request_dict.get('username', None)
  223. role = request_dict.get('role', None)
  224. password = request_dict.get('password', None)
  225. phone = request_dict.get('phone', None)
  226. if username:
  227. update_data = {}
  228. if role:
  229. update_data['permission'] = role
  230. if password:
  231. update_data['password'] = password
  232. if phone:
  233. update_data['phone'] = phone
  234. UserModel.objects.filter(username=username).update(**update_data)
  235. return response.json(0)
  236. else:
  237. return response.json(444)
  238. def do_admin_reset(self, userID, request_dict, response):
  239. perm = ModelService.check_perm(userID, 0)
  240. if not perm:
  241. return response.json(309)
  242. username = request_dict.get('username', None)
  243. if username:
  244. user_qs = UserModel.objects.filter(username=username)
  245. if user_qs.exists():
  246. user_qs.update(password='123456')
  247. return response.json(0)
  248. else:
  249. return response.json(9)
  250. else:
  251. return response.json(444)