views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. from django.shortcuts import render, redirect, HttpResponse
  2. from django.http import JsonResponse, HttpResponseRedirect
  3. from django.views.generic import View
  4. # from . import models
  5. from .models import User, Menu
  6. from django.core.serializers import serialize
  7. import json
  8. # Create your views here.
  9. def format_useinfo(user):
  10. format_user = json.loads(
  11. serialize('json', user, ensure_ascii=False)
  12. )
  13. for item in format_user:
  14. res = item.get('fields')
  15. res['userId'] = item.get('pk')
  16. res['roles'] = [
  17. {
  18. 'roleName': res.get('roleName'), 'value': res.get('value')
  19. }
  20. ]
  21. res.pop('roleName')
  22. res.pop('value')
  23. res.pop('password')
  24. return res
  25. def format_uselist(list):
  26. json_user = json.loads(
  27. serialize('json', list, ensure_ascii=False)
  28. )
  29. res = []
  30. for item in json_user:
  31. item['fields'].pop('value')
  32. item['fields'].pop('token')
  33. user = item.get('fields')
  34. user['id'] = item.get('pk')
  35. # res['roles'] = [
  36. # {
  37. # 'roleName': res.get('roleName'), 'value': res.get('value')
  38. # }
  39. # ]
  40. # res.pop('roleName')
  41. # res.pop('value')
  42. # res.pop('password')
  43. res.append(user)
  44. return res
  45. def format_login_result(user):
  46. format_user = json.loads(
  47. serialize('json', user, ensure_ascii=False)
  48. )
  49. for item in format_user:
  50. res = {}
  51. res['userId'] = item.get('pk')
  52. res['menus'] = item.get('menus')
  53. res['token'] = item.get('fields').get('token')
  54. res['roles'] = [
  55. {
  56. 'roleName': item.get('fields').get('roleName'), 'value': item.get('fields').get('value')
  57. }
  58. ]
  59. return res
  60. def format_menus(querySetObj, mode):
  61. # querySet 转json对象
  62. data = json.loads(serialize('json', querySetObj, ensure_ascii=False))
  63. # 定义一级菜单列表(无父id)
  64. menus = []
  65. # 子菜单列表
  66. childrens = []
  67. for item in data:
  68. item['fields']['id'] = item.get('pk')
  69. # mode True -- 否将某些字段合并处理成前台路由需要的数据结构;
  70. if mode:
  71. item['fields']['meta'] = {
  72. "title": item['fields'].pop('title'),
  73. "affix": item['fields'].pop('affix'),
  74. "icon": item['fields'].pop('icon'),
  75. }
  76. if (item.get('fields').get('parent') == None):
  77. menus.append(item.get('fields'))
  78. else:
  79. childrens.append(item.get('fields'))
  80. for children in childrens:
  81. # 将列表转化成树形菜单
  82. getTree(children, menus, childrens)
  83. else: # False -- 不必转成树结构, menuName 语言包需要到前台转中文
  84. item['fields']["menuName"] = item['fields'].pop("title")
  85. item['fields'].pop('affix')
  86. menus.append(item.get('fields'))
  87. return menus
  88. """
  89. def getTree(children, menus, childrens)
  90. 根据传递过来的父菜单id,递归设置各层次父菜单的子菜单列表
  91. :children: 单个子菜单
  92. :param menus: 父菜单列表 一级菜单
  93. :childrens: 子菜单列表,第二次调用
  94. """
  95. def getTree(children, menus, childrens):
  96. # 遍历父菜单
  97. for m in menus:
  98. # 当前菜单的id 和 子菜单的父id 是否匹配
  99. if m.get('id') == children.get('parent'):
  100. if not m.get('children'):
  101. m['children'] = []
  102. if not children in m['children']: # 判单子菜单是否已存在
  103. m['children'].append(children)
  104. if m.get('children'):
  105. for children in childrens:
  106. # 判断子菜单是否还有匹配的子菜单
  107. getTree(children, m.get('children'), childrens)
  108. # 请求---------------------------------------------------------------------
  109. class login(View):
  110. def post(self, request):
  111. data = json.loads(request.body)
  112. user = User.objects.all().filter(username=data.get(
  113. 'username'), password=data.get('password'))
  114. if user:
  115. res = format_login_result(user)
  116. return JsonResponse({'code': 0, 'msg': 'success', 'result': res}, json_dumps_params={"ensure_ascii": False})
  117. else:
  118. return JsonResponse({'code': 1, 'error': '用户名或密码不正确'}, json_dumps_params={"ensure_ascii": False})
  119. class getUserInfoById(View):
  120. def get(self, request):
  121. userid = request.GET.get('userId')
  122. user = User.objects.all().filter(id=userid)
  123. if user:
  124. # res = {'codeList': ['1000', '3000', '5000']}
  125. res = format_useinfo(user)
  126. return JsonResponse({'code': 0, 'result': res, }, json_dumps_params={"ensure_ascii": False})
  127. else:
  128. return JsonResponse({'code': 1, 'type': 'error', 'message': 'no role,create role'}, json_dumps_params={"ensure_ascii": False})
  129. class getUserList(View):
  130. def get(self, request):
  131. users = User.objects.all()
  132. if users:
  133. res = format_uselist(users)
  134. return JsonResponse({'code': 0, 'result': res, }, json_dumps_params={"ensure_ascii": False})
  135. else:
  136. return JsonResponse({'code': 1, 'type': 'error', 'message': 'no role,create role'}, json_dumps_params={"ensure_ascii": False})
  137. class addUser(View):
  138. def post(self, request):
  139. data = json.loads(request.body)
  140. menuIdList = data.pop('menus')
  141. menus = Menu.objects.all().filter(id__in=menuIdList)
  142. # print(menus)
  143. # data.menus = menus
  144. print(data)
  145. print('--------------data------------')
  146. if User.objects.all().filter(username=data.get('username')):
  147. return JsonResponse({'code': 1, 'type': 'error', 'message': '该角色名已被占用'}, json_dumps_params={"ensure_ascii": False})
  148. else:
  149. data['token'] = data.get('username') + 'token'
  150. userObj = User.objects.create(**data)
  151. userObj.menus.set(menus)
  152. return JsonResponse({'code': 0, 'result': {'data': '角色创建成功'}}, json_dumps_params={"ensure_ascii": False})
  153. class editUser(View):
  154. def post(self, request):
  155. data = json.loads(request.body)
  156. user = User.objects.all().filter(id=data.get('id')).first()
  157. if User.objects.all().filter(username=data.get('username')) and user.username != data.get('username'):
  158. return JsonResponse({'code': 1, 'type': 'error', 'message': '该角色名已被占用'}, json_dumps_params={"ensure_ascii": False})
  159. if user:
  160. menuIdList = data.pop('menus')
  161. menus = Menu.objects.all().filter(id__in=menuIdList)
  162. user.username = data.get('username')
  163. user.password = data.get('password')
  164. user.realName = data.get('realName')
  165. user.status = data.get('status')
  166. user.detail = data.get('detail')
  167. user.menus.set(menus)
  168. user.save()
  169. return JsonResponse({'code': 0, 'type': 'error', 'message': '修改成功', 'result': {'data': '修改成功'}}, json_dumps_params={"ensure_ascii": False})
  170. else:
  171. return JsonResponse({'code': 1, 'type': 'error', 'message': '查无此人'}, json_dumps_params={"ensure_ascii": False})
  172. # userObj = User.objects.create(**data)
  173. # userObj.menus.set(menus)
  174. class deleteUser(View):
  175. def post(self, request):
  176. data = json.loads(request.body)
  177. user = User.objects.all().filter(id=data.get('id'))
  178. try:
  179. if user:
  180. user.delete()
  181. return JsonResponse({'code': 0, 'result': {'data': '删除角色成功'}}, json_dumps_params={"ensure_ascii": False})
  182. else:
  183. return JsonResponse({'code': 1, 'type': 'error', 'message': '查无此人'}, json_dumps_params={"ensure_ascii": False})
  184. except Exception as e:
  185. print(e)
  186. return JsonResponse({'code': 1, 'type': 'error', 'message': e}, json_dumps_params={"ensure_ascii": False})
  187. class getMenuListById(View):
  188. def post(self, request):
  189. # 获取参数id
  190. userId = json.loads(request.body).get('id')
  191. print(userId)
  192. # 当前用户
  193. querSetUser = User.objects.all().filter(id=userId)
  194. user = format_useinfo(querSetUser)
  195. # 获取当前user 的menus(id集合)
  196. menuIdList = user.get('menus')
  197. # 匹配查询 id__in=[1,2,3]
  198. querySetMenu = Menu.objects.all().filter(id__in=menuIdList)
  199. menus = format_menus(querySetMenu, True)
  200. return JsonResponse({'code': 0, 'result': menus})
  201. class getAllMenuList(View):
  202. def get(self, request):
  203. querySetObj = Menu.objects.all()
  204. menus = format_menus(querySetObj, False)
  205. return JsonResponse({'code': 0, 'result': {'format': True, 'menus': menus}}, json_dumps_params={"ensure_ascii": False})
  206. class addMenu(View):
  207. def post(self, request):
  208. data = json.loads(request.body)
  209. data['title'] = data.pop('menuName')
  210. if data.get('parent'):
  211. parentId = data.pop('parent')
  212. parent = Menu.objects.all().filter(id=parentId).first()
  213. data['parent'] = parent
  214. menuObj = Menu.objects.create(**data)
  215. # if parent:
  216. # menuObj.parent.set(parent)
  217. return JsonResponse({'code': 0, 'result': {'data': '菜单添加成功'}}, json_dumps_params={"ensure_ascii": False})
  218. class editMenu(View):
  219. def post(self, request):
  220. data = json.loads(request.body)
  221. menu = Menu.objects.all().filter(id=data.get('id')).first()
  222. menu.icon = data.get('icon')
  223. menu.title = data.get('menuName')
  224. menu.path = data.get('path')
  225. menu.reditect = data.get('reditect')
  226. menu.component = data.get('component')
  227. menu.status = data.get('status')
  228. menu.detail = data.get('detail')
  229. menu.parent = Menu.objects.all().filter(id=data.get('parent')).first()
  230. # if data.get('parent'):
  231. # parentId = data.pop('parent')
  232. # menu.parent.add(parent)
  233. # print(menu)
  234. menu.save()
  235. return JsonResponse({'code': 0, 'result': {'data': '菜单修改成功'}}, json_dumps_params={"ensure_ascii": False})
  236. class deleteMenu(View):
  237. def post(self, request):
  238. data = json.loads(request.body)
  239. menu = Menu.objects.all().filter(id=data.get('id'))
  240. try:
  241. if menu:
  242. menu.delete()
  243. return JsonResponse({'code': 0, 'result': {'data': '删除菜单成功'}}, json_dumps_params={"ensure_ascii": False})
  244. else:
  245. return JsonResponse({'code': 1, 'type': 'error', 'message': '没有找到匹配菜单'}, json_dumps_params={"ensure_ascii": False})
  246. except Exception as e:
  247. print(e)
  248. return JsonResponse({'code': 1, 'type': 'error', 'message': 'server error'}, json_dumps_params={"ensure_ascii": False})