123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- from django.shortcuts import render, redirect, HttpResponse
- from django.http import JsonResponse, HttpResponseRedirect
- from django.views.generic import View
- # from . import models
- from .models import User, Menu
- from django.core.serializers import serialize
- from rest_framework.views import APIView
- from api.serializers import *
- import json
- # Create your views here.
- def format_useinfo(user):
- format_user = json.loads(
- serialize('json', user, ensure_ascii=False)
- )
- for item in format_user:
- res = item.get('fields')
- res['userId'] = item.get('pk')
- res['roles'] = [
- {
- 'roleName': res.get('roleName'), 'value': res.get('value')
- }
- ]
- res.pop('roleName')
- res.pop('value')
- res.pop('password')
- return res
- def format_uselist(list):
- json_user = json.loads(
- serialize('json', list, ensure_ascii=False)
- )
- res = []
- for item in json_user:
- item['fields'].pop('value')
- item['fields'].pop('token')
- user = item.get('fields')
- user['id'] = item.get('pk')
- # res['roles'] = [
- # {
- # 'roleName': res.get('roleName'), 'value': res.get('value')
- # }
- # ]
- # res.pop('roleName')
- # res.pop('value')
- # res.pop('password')
- res.append(user)
- return res
- def format_login_result(user):
- format_user = json.loads(
- serialize('json', user, ensure_ascii=False)
- )
- for item in format_user:
- res = {}
- res['userId'] = item.get('pk')
- res['menus'] = item.get('menus')
- res['token'] = item.get('fields').get('token')
- res['roles'] = [
- {
- 'roleName': item.get('fields').get('roleName'), 'value': item.get('fields').get('value')
- }
- ]
- return res
- def format_menus(querySetObj, mode):
- # querySet 转json对象
- data = json.loads(serialize('json', querySetObj, ensure_ascii=False))
- # 定义一级菜单列表(无父id)
- menus = []
- # 子菜单列表
- childrens = []
- for item in data:
- item['fields']['id'] = item.get('pk')
- # mode True -- 否将某些字段合并处理成前台路由需要的数据结构;
- if mode:
- item['fields']['meta'] = {
- "title": item['fields'].pop('title'),
- "affix": item['fields'].pop('affix'),
- "icon": item['fields'].pop('icon'),
- }
- if (item.get('fields').get('parent') == None):
- menus.append(item.get('fields'))
- else:
- childrens.append(item.get('fields'))
- for children in childrens:
- # 将列表转化成树形菜单
- getTree(children, menus, childrens)
- else: # False -- 不必转成树结构, menuName 语言包需要到前台转中文
- item['fields']["menuName"] = item['fields'].pop("title")
- item['fields'].pop('affix')
- menus.append(item.get('fields'))
- return menus
- """
- def getTree(children, menus, childrens)
- 根据传递过来的父菜单id,递归设置各层次父菜单的子菜单列表
- :children: 单个子菜单
- :param menus: 父菜单列表 一级菜单
- :childrens: 子菜单列表,第二次调用
- """
- def getTree(children, menus, childrens):
- # 遍历父菜单
- for m in menus:
- # 当前菜单的id 和 子菜单的父id 是否匹配
- if m.get('id') == children.get('parent'):
- if not m.get('children'):
- m['children'] = []
- if not children in m['children']: # 判单子菜单是否已存在
- m['children'].append(children)
- if m.get('children'):
- for children in childrens:
- # 判断子菜单是否还有匹配的子菜单
- getTree(children, m.get('children'), childrens)
- # 请求---------------------------------------------------------------------
- class login(View):
- def post(self, request):
- data = json.loads(request.body)
- user = User.objects.all().filter(username=data.get(
- 'username'), password=data.get('password'))
- if user:
- res = format_login_result(user)
- return JsonResponse({'code': 0, 'msg': 'success', 'result': res}, json_dumps_params={"ensure_ascii": False})
- else:
- return JsonResponse({'code': 1, 'error': '用户名或密码不正确'}, json_dumps_params={"ensure_ascii": False})
- class getUserInfoById(View):
- def get(self, request):
- userid = request.GET.get('userId')
- user = User.objects.all().filter(id=userid)
- if user:
- # res = {'codeList': ['1000', '3000', '5000']}
- res = format_useinfo(user)
- return JsonResponse({'code': 0, 'result': res, }, json_dumps_params={"ensure_ascii": False})
- else:
- return JsonResponse({'code': 1, 'type': 'error', 'message': 'no role,create role'}, json_dumps_params={"ensure_ascii": False})
- class getUserList(View):
- def get(self, request):
- users = User.objects.all()
- if users:
- res = format_uselist(users)
- return JsonResponse({'code': 0, 'result': res, }, json_dumps_params={"ensure_ascii": False})
- else:
- return JsonResponse({'code': 1, 'type': 'error', 'message': 'no role,create role'}, json_dumps_params={"ensure_ascii": False})
- class addUser(APIView):
- serialize_class = UserSerializer
- def post(self, request):
- user = json.loads(request.body)
- userSer = UserSerializer(data=user)
- if userSer.is_valid():
- menuIdList = user.pop('menus')
- menus = Menu.objects.all().filter(id__in=menuIdList)
- user['token'] = user.get('username') + 'token'
- userObj = User.objects.create(**user)
- userObj.menus.set(menus)
- return JsonResponse({'code': 0, 'result': {'data': '角色创建成功'}}, json_dumps_params={"ensure_ascii": False})
- else:
- print(userSer.errors)
- return JsonResponse({'code': 1, 'type': 'error', 'message': '字段校验未通过', "result": userSer.errors}, json_dumps_params={"ensure_ascii": False})
- # if User.objects.all().filter(username=data.get('username')):
- # return JsonResponse({'code': 1, 'type': 'error', 'message': '该角色名已被占用'}, json_dumps_params={"ensure_ascii": False})
- # else:
- # data['token'] = data.get('username') + 'token'
- # userObj = User.objects.create(**data)
- # userObj.menus.set(menus)
- # return JsonResponse({'code': 0, 'result': {'data': '角色创建成功'}}, json_dumps_params={"ensure_ascii": False})
- class editUser(APIView):
- serialize_class = UserSerializer
- def post(self, request):
- data = json.loads(request.body)
- userSer = UserSerializer(data=data)
- user = User.objects.all().filter(id=data.get('id')).first()
- if not userSer.is_valid() and user.username != data.get('username'):
- return JsonResponse({'code': 1, 'type': 'error', 'message': '字段校验未通过', 'result': userSer.errors}, json_dumps_params={"ensure_ascii": False})
- else:
- menuIdList = data.pop('menus')
- menus = Menu.objects.all().filter(id__in=menuIdList)
- user.username = data.get('username')
- user.password = data.get('password')
- user.realName = data.get('realName')
- user.status = data.get('status')
- user.detail = data.get('detail')
- user.menus.set(menus)
- user.save()
- return JsonResponse({'code': 0, 'type': 'error', 'message': '修改成功', 'result': {'data': '修改成功'}}, json_dumps_params={"ensure_ascii": False})
- class deleteUser(View):
- def post(self, request):
- data = json.loads(request.body)
- user = User.objects.all().filter(id=data.get('id'))
- try:
- if user:
- user.delete()
- return JsonResponse({'code': 0, 'result': {'data': '删除角色成功'}}, json_dumps_params={"ensure_ascii": False})
- else:
- return JsonResponse({'code': 1, 'type': 'error', 'message': '查无此人'}, json_dumps_params={"ensure_ascii": False})
- except Exception as e:
- print(e)
- return JsonResponse({'code': 1, 'type': 'error', 'message': e}, json_dumps_params={"ensure_ascii": False})
- class getMenuListById(View):
- def post(self, request):
- # 获取参数id
- userId = json.loads(request.body).get('id')
- print(userId)
- # 当前用户
- querSetUser = User.objects.all().filter(id=userId)
- user = format_useinfo(querSetUser)
- # 获取当前user 的menus(id集合)
- menuIdList = user.get('menus')
- # 匹配查询 id__in=[1,2,3]
- querySetMenu = Menu.objects.all().filter(id__in=menuIdList)
- menus = format_menus(querySetMenu, True)
- return JsonResponse({'code': 0, 'result': menus})
- class getAllMenuList(View):
- def get(self, request):
- querySetObj = Menu.objects.all()
- menus = format_menus(querySetObj, False)
- return JsonResponse({'code': 0, 'result': {'format': True, 'menus': menus}}, json_dumps_params={"ensure_ascii": False})
- class addMenu(APIView):
- serialize_class = MenuSerializer
- def post(self, request):
- data = json.loads(request.body)
- data['title'] = data.pop('menuName')
- menuSer = MenuSerializer(data=data)
- if menuSer.is_valid():
- if data.get('parent'):
- parentId = data.pop('parent')
- parent = Menu.objects.all().filter(id=parentId).first()
- data['parent'] = parent
- menuObj = Menu.objects.create(**data)
- return JsonResponse({'code': 0, 'result': {'data': '菜单添加成功'}}, json_dumps_params={"ensure_ascii": False})
- else:
- return JsonResponse({'code': 1, 'type': 'error', 'message': '字段校验未通过', "result": menuSer.errors}, json_dumps_params={"ensure_ascii": False})
- class editMenu(APIView):
- serialize_class = MenuSerializer
- def post(self, request):
- data = json.loads(request.body)
- data['title'] = data.pop('menuName')
- menuSer = MenuSerializer(data=data)
- if menuSer.is_valid():
- menu = Menu.objects.all().filter(id=data.get('id')).first()
- menu.icon = data.get('icon')
- menu.title = data.get('title')
- menu.path = data.get('path')
- menu.reditect = data.get('reditect')
- menu.component = data.get('component')
- menu.status = data.get('status')
- menu.detail = data.get('detail')
- menu.parent = Menu.objects.all().filter(id=data.get('parent')).first()
- menu.save()
- return JsonResponse({'code': 0, 'result': {'data': '菜单修改成功'}}, json_dumps_params={"ensure_ascii": False})
- else:
- return JsonResponse({'code': 1, 'type': 'error', 'message': '字段校验未通过', "result": menuSer.errors}, json_dumps_params={"ensure_ascii": False})
- class deleteMenu(View):
- def post(self, request):
- data = json.loads(request.body)
- menu = Menu.objects.all().filter(id=data.get('id'))
- try:
- if menu:
- menu.delete()
- return JsonResponse({'code': 0, 'result': {'data': '删除菜单成功'}}, json_dumps_params={"ensure_ascii": False})
- else:
- return JsonResponse({'code': 1, 'type': 'error', 'message': '没有找到匹配菜单'}, json_dumps_params={"ensure_ascii": False})
- except Exception as e:
- print(e)
- return JsonResponse({'code': 1, 'type': 'error', 'message': 'server error'}, json_dumps_params={"ensure_ascii": False})
|