views.py 5.0 KB

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