views.py 12 KB

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