UserManger.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import datetime
  4. import os
  5. import traceback
  6. import simplejson as json
  7. from django.core import serializers
  8. from django.core.files.storage import FileSystemStorage
  9. from django.http import HttpResponse
  10. from django.utils import timezone
  11. from django.utils.decorators import method_decorator
  12. from django.views.decorators.csrf import csrf_exempt
  13. from django.views.generic import TemplateView, View
  14. from Ansjer.config import SERVER_DOMAIN
  15. from Ansjer.settings import BASE_DIR
  16. from Model.models import Role, Device_User
  17. from Object.ResponseObject import ResponseObject
  18. from Object.TokenObject import TokenObject
  19. from Service.CommonService import CommonService
  20. from Service.ModelService import ModelService
  21. # http://192.168.136.40:8077/account/showUserMore?token=test
  22. class showUserMoreView(TemplateView):
  23. @method_decorator(csrf_exempt)
  24. def dispatch(self, *args, **kwargs):
  25. return super(showUserMoreView, self).dispatch(*args, **kwargs)
  26. def post(self, request, *args, **kwargs):
  27. request.encoding = 'utf-8'
  28. token = request.POST.get('token', None)
  29. return self.ValidationError(token)
  30. def get(self, request, *args, **kwargs):
  31. request.encoding = 'gb2312'
  32. token = request.GET.get('token', None)
  33. return self.ValidationError(token)
  34. def ValidationError(self, token):
  35. response = ResponseObject()
  36. if token is not None:
  37. tko = TokenObject(token)
  38. tko.valid()
  39. response.lang = tko.lang
  40. if tko.code == 0:
  41. userID = tko.userID()
  42. if userID:
  43. return self.showUserMore(userID, response)
  44. else:
  45. return response.json(310)
  46. else:
  47. return response.json(tko.code)
  48. else:
  49. return response.json(800)
  50. def showUserMore(self, userID, response):
  51. try:
  52. User = Device_User.objects.filter(userID=userID)
  53. except Exception as e:
  54. errorInfo = traceback.format_exc()
  55. print('Query Database Error: %s' % errorInfo)
  56. return response.json(500, repr(e))
  57. else:
  58. if User:
  59. sqlJSON = serializers.serialize('json', User)
  60. sqlList = json.loads(sqlJSON)
  61. sqlDict = dict(zip(["datas"], [sqlList]))
  62. for k, v in enumerate(sqlDict["datas"]):
  63. sqlDict['datas'][k]['fields'].pop('password')
  64. if len(v['fields']['role']):
  65. roleName = ModelService.getRole(rid=v['fields']['role'][0])
  66. sqlDict["datas"][k]['fields']['rolename'] = roleName
  67. return response.json(0, sqlDict)
  68. else:
  69. return response.json(113)
  70. # http://192.168.136.40:8077/account/perfectUserInfo?token=test&content={"NickName":"333"}
  71. class perfectUserInfoView(TemplateView):
  72. # 完善个人信息
  73. @method_decorator(csrf_exempt)
  74. def dispatch(self, *args, **kwargs):
  75. return super(perfectUserInfoView, self).dispatch(*args, **kwargs)
  76. def post(self, request, *args, **kwargs):
  77. request.encoding = 'utf-8'
  78. userContent = request.POST.get('content', None)
  79. userIcon = request.FILES.get('userIcon', None)
  80. token = request.POST.get('token', None)
  81. return self.ValidationError(token, userContent, userIcon)
  82. def get(self, request, *args, **kwargs):
  83. request.encoding = 'gb2312'
  84. userContent = request.GET.get('content', None)
  85. userIcon = request.FILES.get('userIcon', None)
  86. token = request.GET.get('token', None)
  87. return self.ValidationError(token, userContent, userIcon)
  88. def ValidationError(self, token, userContent, userIcon):
  89. response = ResponseObject()
  90. if token is not None:
  91. tko = TokenObject(token)
  92. tko.valid()
  93. response.lang = tko.lang
  94. if tko.code == 0:
  95. userID = tko.userID()
  96. if userID:
  97. if userIcon != None:
  98. # location = 'static/User/Images/' + userID[-11:] + '/'
  99. location = 'static/User/Images/' + userID + '/'
  100. fss = FileSystemStorage(location=location)
  101. if fss.exists(userIcon.name):
  102. fss.delete(userIcon.name)
  103. filename = fss.save(userIcon.name, userIcon)
  104. userIconUrl = fss.url(filename)
  105. userIconPath = fss.path(filename).replace('\\', '/')
  106. else:
  107. userIconPath = None
  108. if userContent != None:
  109. dataValid = json.loads(userContent)
  110. print('userID' and 'password' and 'is_superuser' in dataValid.keys())
  111. if 'userID' and 'password' and 'is_superuser' in dataValid.keys():
  112. return response.json(802)
  113. if userIconPath == None and userContent == None:
  114. return response.json(800)
  115. elif userIconPath == None and userContent != None:
  116. return self.perfectUserInfoUpdate(userID, response, userContent=userContent)
  117. elif userIconPath != None and userContent == None:
  118. return self.perfectUserInfoUpdate(userID, response, userIconPath=userIconPath)
  119. else:
  120. return self.perfectUserInfoUpdate(userID, response, userIconPath=userIconPath,
  121. userContent=userContent)
  122. else:
  123. return response.json(310)
  124. else:
  125. return response.json(tko.code)
  126. else:
  127. return response.json(800)
  128. def perfectUserInfoUpdate(slef, userID, response, *args,
  129. **kwargs):
  130. """
  131. :param username:
  132. :param userContent:
  133. :param args:
  134. :param kwargs:
  135. :return:
  136. """
  137. try:
  138. User = Device_User.objects.filter(userID=userID)
  139. except Exception as e:
  140. errorInfo = traceback.format_exc()
  141. print('查询数据库失败: %s ' % errorInfo)
  142. return response.json(500, repr(e))
  143. else:
  144. if User:
  145. userIconPath = kwargs.get('userIconPath', None)
  146. userContent = kwargs.get('userContent', None)
  147. if userIconPath is not None:
  148. userIconPath = userIconPath[userIconPath.find('static/'):]
  149. userIconUrl = SERVER_DOMAIN + '/account/getAvatar/' + userIconPath[7:]
  150. if userContent != None:
  151. try:
  152. UserData = json.loads(userContent)
  153. except Exception as e:
  154. return response.json(803, repr(e))
  155. try:
  156. if userIconPath is not None and userContent is not None:
  157. User.update(userIconPath=userIconPath, userIconUrl=userIconUrl, **UserData)
  158. elif userIconPath is None and userContent is not None:
  159. User.update(**UserData)
  160. elif userIconPath is not None and userContent is None:
  161. User.update(userIconPath=userIconPath, userIconUrl=userIconUrl)
  162. except Exception as e:
  163. errorInfo = traceback.format_exc()
  164. print('修改设备信息错误: %s ' % errorInfo)
  165. return response.json(116, repr(e))
  166. else:
  167. sqlJSON = serializers.serialize('json', User)
  168. sqlList = json.loads(sqlJSON)
  169. print(sqlList, sqlJSON)
  170. sqlDict = dict(zip(["datas"], [sqlList]))
  171. return response.json(0, sqlDict)
  172. else:
  173. return response.json(113)
  174. class getAvatarView(TemplateView):
  175. @method_decorator(csrf_exempt)
  176. def dispatch(self, *args, **kwargs):
  177. return super(getAvatarView, self).dispatch(*args, **kwargs)
  178. def post(self, request, *args, **kwargs):
  179. request.encoding = 'utf-8'
  180. filePath = kwargs.get('filePath', '')
  181. filePath.encode(encoding='utf-8', errors='strict')
  182. return self.getAvatar(filePath)
  183. def get(self, request, *args, **kwargs):
  184. request.encoding = 'gb2312'
  185. filePath = kwargs.get('filePath', '')
  186. filePath.encode(encoding='gb2312', errors='strict')
  187. return self.getAvatar(filePath)
  188. def getAvatar(self, filePath):
  189. response = ResponseObject()
  190. if filePath == '' or filePath == None:
  191. return response.json(800)
  192. fullPath = os.path.join(BASE_DIR, "static", filePath).replace('\\', '/')
  193. if os.path.isfile(fullPath):
  194. try:
  195. Imagedata = open(fullPath, 'rb').read()
  196. return HttpResponse(Imagedata, content_type="image/jpeg")
  197. except Exception as e:
  198. return response.json(906, repr(e))
  199. else:
  200. return response.json(907)
  201. @csrf_exempt
  202. def delUserInterface(request):
  203. if request.method == 'POST':
  204. delUserID = request.POST.get('delUserID', None)
  205. token = request.POST.get('token', None)
  206. elif request.method == 'GET':
  207. delUserID = request.GET.get('delUserID', None)
  208. token = request.GET.get('token', None)
  209. response = ResponseObject()
  210. if token is not None and delUserID is not None:
  211. tko = TokenObject(token)
  212. tko.valid()
  213. response.lang = tko.lang
  214. if tko.code == 0:
  215. userID = tko.userID()
  216. if userID:
  217. try:
  218. userValid = Device_User.objects.filter(userID=userID)
  219. except Exception as e:
  220. errorInfo = traceback.format_exc()
  221. print('Query Database Error: %s' % errorInfo)
  222. return response.json(500, repr(e))
  223. else:
  224. if userValid:
  225. own_perm = ModelService.check_permission(userID=userID, permID=10)
  226. if userValid[0].is_superuser == 100 or own_perm is True:
  227. try:
  228. delUser = Device_User.objects.filter(userID=delUserID)
  229. except Exception as e:
  230. errorInfo = traceback.format_exc()
  231. print('Query database error: %s' % errorInfo)
  232. return response.json(500, repr(e))
  233. else:
  234. if delUser:
  235. try:
  236. delUser.delete()
  237. except Exception as e:
  238. errorInfo = traceback.format_exc()
  239. print('Query database error: %s' % errorInfo)
  240. return response.json(114, repr(e))
  241. else:
  242. return response.json(0)
  243. else:
  244. return response.json(115)
  245. else:
  246. return response.json(601)
  247. else:
  248. return response.json(113)
  249. else:
  250. return response.json(310)
  251. else:
  252. return response.json(tko.code)
  253. else:
  254. return response.json(800)
  255. def showAllUserPC(userID, line, page, response):
  256. try:
  257. userValid = Device_User.objects.filter(userID=userID).order_by('-data_joined')
  258. except Exception as e:
  259. errorInfo = traceback.format_exc()
  260. print('Query Database Error:%s' % errorInfo)
  261. return response.json(500, repr(e))
  262. else:
  263. if userValid:
  264. # 管理员查询
  265. own_permission = ModelService.check_permission(userID=userID, permID=30)
  266. if own_permission is True:
  267. device_user_queryset = Device_User.objects.all()
  268. device_user_count = device_user_queryset.count()
  269. device_user_res = device_user_queryset.order_by('-data_joined')[(page - 1) * line:page * line]
  270. sqlDict = CommonService.qs_to_dict(device_user_res)
  271. for k, v in enumerate(sqlDict["datas"]):
  272. if len(v['fields']['role']) > 0:
  273. role_query_set = Role.objects.get(rid=v['fields']['role'][0])
  274. sqlDict["datas"][k]['fields']['role'].append(role_query_set.roleName)
  275. for val in device_user_res:
  276. if v['pk'] == val.userID:
  277. if sqlDict["datas"][k]['fields']['online'] is True:
  278. dl_time = val.last_login + datetime.timedelta(minutes=5)
  279. now_time = timezone.localtime(timezone.now())
  280. if now_time > dl_time:
  281. sqlDict["datas"][k]['fields']['online'] = False
  282. sqlDict['count'] = device_user_count
  283. return response.json(0, sqlDict)
  284. else:
  285. return response.json(600)
  286. else:
  287. return response.json(113)
  288. def showAllUser(userID, response):
  289. try:
  290. userValid = Device_User.objects.filter(userID=userID).order_by('-data_joined')
  291. except Exception as e:
  292. errorInfo = traceback.format_exc()
  293. print('Query Database Error:%s' % errorInfo)
  294. return response.json(500, repr(e))
  295. else:
  296. if userValid:
  297. own_permission = ModelService.check_permission(userID=userID, permID=30)
  298. if own_permission is True:
  299. sqlJSON = serializers.serialize('json', Device_User.objects.all().order_by('-data_joined'))
  300. sqlList = json.loads(sqlJSON)
  301. print(sqlList, sqlJSON)
  302. sqlDict = dict(zip(["datas"], [sqlList]))
  303. return response.json(0, sqlDict)
  304. else:
  305. return response.json(600)
  306. else:
  307. return response.json(113)
  308. @csrf_exempt
  309. def showAllUserInterface(request):
  310. if request.method == 'POST':
  311. token = request.POST.get('token', None)
  312. type = request.POST.get('type', None)
  313. elif request.method == 'GET':
  314. token = request.GET.get('token', None)
  315. type = request.GET.get('type', None)
  316. response = ResponseObject()
  317. if token is not None:
  318. tko = TokenObject(token)
  319. tko.valid()
  320. response.lang = tko.lang
  321. if tko.code == 0:
  322. userID = tko.userID()
  323. if userID:
  324. if type == 'PC':
  325. line = int(request.POST.get('line', None))
  326. page = int(request.POST.get('page', None))
  327. return showAllUserPC(userID, line, page, response)
  328. else:
  329. return showAllUser(userID, response)
  330. else:
  331. return response.json(310)
  332. else:
  333. return response.json(tko.code)
  334. else:
  335. return response.json(800)
  336. class setUserValidView(View):
  337. @method_decorator(csrf_exempt)
  338. def dispatch(self, *args, **kwargs):
  339. return super(setUserValidView, self).dispatch(*args, **kwargs)
  340. def post(self, request, *args, **kwargs):
  341. request.encoding = 'utf-8'
  342. token = request.POST.get('token', None)
  343. eUserID = request.POST.get('userID', None)
  344. isValid = request.POST.get('isValid', None)
  345. rid = request.POST.get('rid', None)
  346. return self.setUserValid(token, eUserID, isValid, rid)
  347. def get(self, request, *args, **kwargs):
  348. request.encoding = 'gb2312'
  349. token = request.GET.get('token', None)
  350. eUserID = request.GET.get('userID', None)
  351. isValid = request.GET.get('isValid', None)
  352. rid = request.GET.get('rid', None)
  353. return self.setUserValid(token, eUserID, isValid, rid)
  354. def setUserValid(self, token, eUserID, isValid, rid, *args, **kwargs):
  355. response = ResponseObject()
  356. if token is not None:
  357. tko = TokenObject(token)
  358. tko.valid()
  359. response.lang = tko.lang
  360. if tko.code == 0:
  361. superID = tko.userID()
  362. if superID != None and superID != eUserID:
  363. if rid == None:
  364. return self.UserValidUpdate(superID, eUserID, isValid, response)
  365. else:
  366. return self.UserValidUpdatePC(superID, eUserID, isValid, rid, response)
  367. else:
  368. return response.json(150)
  369. else:
  370. return response.json(tko.code)
  371. else:
  372. return response.json(800)
  373. def UserValidUpdatePC(self, superID, eUserID, isValid, rid, response):
  374. try:
  375. super = Device_User.objects.filter(userID=superID)
  376. eUser = Device_User.objects.filter(userID=eUserID)
  377. except Exception as e:
  378. errorInfo = traceback.format_exc()
  379. print('查询数据库错误: %s' % errorInfo)
  380. return response.json(500, repr(e))
  381. else:
  382. if not super:
  383. return response.json(615)
  384. if not eUser:
  385. return response.json(616)
  386. own_permission = ModelService.check_permission(userID=superID, permID=50)
  387. if own_permission is True:
  388. try:
  389. eUser.update(user_isValid=isValid)
  390. device_user_query_set = Device_User.objects.get(userID=eUserID)
  391. if device_user_query_set.role.all():
  392. device_user_query_set.role.set([rid])
  393. else:
  394. role_user_query_set = Role.objects.get(rid=rid)
  395. device_user_query_set.role.add(role_user_query_set)
  396. except Exception as e:
  397. errorInfo = traceback.format_exc()
  398. print('更新数据库错误:%s' % errorInfo)
  399. return response.json(501, repr(e))
  400. else:
  401. return response.json(0)
  402. else:
  403. return response.json(602)
  404. def UserValidUpdate(self, superID, eUserID, isValid, response):
  405. try:
  406. super = Device_User.objects.filter(userID=superID)
  407. eUser = Device_User.objects.filter(userID=eUserID)
  408. except Exception as e:
  409. errorInfo = traceback.format_exc()
  410. print('查询数据库错误: %s' % errorInfo)
  411. return response.json(500, repr(e))
  412. if not super:
  413. return response.json(113)
  414. if not eUser:
  415. return response.json(113)
  416. if super[0].is_superuser != 100 or super[0].is_superuser == eUser[0].is_superuser:
  417. return response.json(602)
  418. try:
  419. updateCount = eUser.update(user_isValid=isValid)
  420. except Exception as e:
  421. errorInfo = traceback.format_exc()
  422. print('更新数据库错误: %s' % errorInfo)
  423. return response.json(501, repr(e))
  424. return response.json(0)
  425. @csrf_exempt
  426. def success(request):
  427. return HttpResponse(status=200)