views.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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_login_result(user):
  51. format_user = json.loads(
  52. serialize('json', user, ensure_ascii=False)
  53. )
  54. for item in format_user:
  55. res = {}
  56. res['userId'] = item.get('pk')
  57. res['token'] = item.get('fields').get('token')
  58. res['roles'] = [
  59. {
  60. 'roleName': item.get('fields').get('roleName'), 'value': item.get('fields').get('value')
  61. }
  62. ]
  63. return res
  64. def format_menus(data):
  65. # 一级菜单列表(无父id)
  66. menus = []
  67. # 子菜单列表
  68. childrens = []
  69. for item in data:
  70. item['fields']['id'] = item.get('pk')
  71. # 将某些字段合并处理成前台需要的路由结构
  72. item['fields']['meta'] = {
  73. "title": item.get('fields').get('title'),
  74. "affix": item.get('fields').get('affix'),
  75. "icon": item.get('fields').get('icon'),
  76. }
  77. # 删除多余字段
  78. item['fields'].pop('title')
  79. item['fields'].pop('affix')
  80. item['fields'].pop('icon')
  81. if (item.get('fields').get('parent') == None):
  82. menus.append(item.get('fields'))
  83. else:
  84. childrens.append(item.get('fields'))
  85. for children in childrens:
  86. # 将列表转化成树形菜单
  87. getTree(children, menus, childrens)
  88. return menus
  89. """
  90. def getTree(children, menus, childrens)
  91. 根据传递过来的父菜单id,递归设置各层次父菜单的子菜单列表
  92. :children: 单个子菜单
  93. :param menus: 父菜单列表 一级菜单
  94. :childrens: 子菜单列表,第二次调用
  95. """
  96. def getTree(children, menus, childrens):
  97. # 遍历父菜单
  98. for m in menus:
  99. # 当前菜单的id 和 子菜单的父id 是否匹配
  100. if m.get('id') == children.get('parent'):
  101. if not m.get('children'):
  102. m['children'] = []
  103. if not children in m['children']: # 判单子菜单是否已存在
  104. m['children'].append(children)
  105. if m.get('children'):
  106. for children in childrens:
  107. # 判断子菜单是否还有匹配的子菜单
  108. getTree(children, m.get('children'), childrens)
  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. print('-------user---------')
  116. print(user)
  117. res = format_login_result(user)
  118. print('---------------res--------')
  119. print(res)
  120. return JsonResponse({'code': 0, 'msg': 'success', 'result': res}, json_dumps_params={"ensure_ascii": False})
  121. else:
  122. return JsonResponse({'code': 1, 'error': '用户名或密码不正确'}, json_dumps_params={"ensure_ascii": False})
  123. class getUserInfoById(View):
  124. def get(self, request):
  125. userid = request.GET.get('userId')
  126. user = User.objects.all().filter(id=userid)
  127. if user:
  128. # res = {'codeList': ['1000', '3000', '5000']}
  129. res = format_useinfo(user)
  130. return JsonResponse({'code': 0, 'result': res, })
  131. else:
  132. return JsonResponse({'code': 1, 'result': {'message': 'error'}}, json_dumps_params={"ensure_ascii": False})
  133. class add_user(View):
  134. def post(self, request):
  135. data = request.POST
  136. if User.objects.all().filter(username=data.get('username')):
  137. return JsonResponse({'code': 0, 'error': '该角色名已被创建'})
  138. else:
  139. User.objects.create(**data)
  140. return JsonResponse({'code': 1, 'data': '角色创建成功'})
  141. class getMenuListById(View):
  142. def get(self, request):
  143. querySetObj = Menu.objects.all()
  144. # querySet 转json对象
  145. data = json.loads(serialize('json', querySetObj, ensure_ascii=False))
  146. menus = format_menus(data)
  147. return JsonResponse({'code': 0, 'result': menus})
  148. class add_menu(View):
  149. def post(self, request):
  150. data = request.POST
  151. Menu.objects.create(**data)
  152. return JsonResponse({'code': 1, 'error': '菜单添加成功'})