views.py 9.4 KB

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