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 = request.POST user = User.objects.all().filter(username=data.get( 'username'), password=data.get('password')) print(user) if user: res = format_login_result(user) return JsonResponse({'code': 1, 'msg': 'success', 'result': res}, json_dumps_params={"ensure_ascii": False}) else: return JsonResponse({'code': 0, 'error': '用户名或密码不正确'}, json_dumps_params={"ensure_ascii": False}) class getUserInfoById(View): def post(self, request): userid = request.POST.get('userId') print('====================udsaersadf======') print(userid) print('====================udsaersadf======') user = User.objects.all().filter(id=userid) if user: # res = {'codeList': ['1000', '3000', '5000']} res = format_useinfo(user) return JsonResponse({'code': 1, 'result': res, }, json_dumps_params={"ensure_ascii": False}) else: return JsonResponse({'code': 0, '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': 1, 'result': res, }, json_dumps_params={"ensure_ascii": False}) else: return JsonResponse({'code': 0, '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) user = request.POST 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': 1, 'result': {'data': '角色创建成功'}}, json_dumps_params={"ensure_ascii": False}) else: print(userSer.errors) return JsonResponse({'code': 0, 'type': 'error', 'message': '字段校验未通过', "result": userSer.errors}, json_dumps_params={"ensure_ascii": False}) # if User.objects.all().filter(username=data.get('username')): # return JsonResponse({'code': 0, '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': 1, 'result': {'data': '角色创建成功'}}, json_dumps_params={"ensure_ascii": False}) class editUser(APIView): serialize_class = UserSerializer def post(self, request): # data = json.loads(request.body) data = request.POST 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': 0, '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.nickname = data.get('nickname') user.status = data.get('status') user.detail = data.get('detail') user.menus.set(menus) user.save() return JsonResponse({'code': 1, 'type': 'error', 'message': '修改成功', 'result': {'data': '修改成功'}}, json_dumps_params={"ensure_ascii": False}) class deleteUser(View): def post(self, request): data = request.POST user = User.objects.all().filter(id=data.get('id')) try: if user: user.delete() return JsonResponse({'code': 1, 'result': {'data': '删除角色成功'}}, json_dumps_params={"ensure_ascii": False}) else: return JsonResponse({'code': 0, 'type': 'error', 'message': '查无此人'}, json_dumps_params={"ensure_ascii": False}) except Exception as e: print(e) return JsonResponse({'code': 0, 'type': 'error', 'message': e}, json_dumps_params={"ensure_ascii": False}) class getMenuListById(View): def post(self, request): # 获取参数id userId = request.POST.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': 1, 'result': menus}) class getAllMenuList(View): def get(self, request): querySetObj = Menu.objects.all() menus = format_menus(querySetObj, False) return JsonResponse({'code': 1, '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 = request.POST 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': 1, 'result': {'data': '菜单添加成功'}}, json_dumps_params={"ensure_ascii": False}) else: return JsonResponse({'code': 0, 'type': 'error', 'message': '字段校验未通过', "result": menuSer.errors}, json_dumps_params={"ensure_ascii": False}) class editMenu(APIView): serialize_class = MenuSerializer def post(self, request): data = request.POST 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': 1, 'result': {'data': '菜单修改成功'}}, json_dumps_params={"ensure_ascii": False}) else: return JsonResponse({'code': 0, 'type': 'error', 'message': '字段校验未通过', "result": menuSer.errors}, json_dumps_params={"ensure_ascii": False}) class deleteMenu(View): def post(self, request): data = request.POST menu = Menu.objects.all().filter(id=data.get('id')) try: if menu: menu.delete() return JsonResponse({'code': 1, 'result': {'data': '删除菜单成功'}}, json_dumps_params={"ensure_ascii": False}) else: return JsonResponse({'code': 0, 'type': 'error', 'message': '没有找到匹配菜单'}, json_dumps_params={"ensure_ascii": False}) except Exception as e: print(e) return JsonResponse({'code': 0, 'type': 'error', 'message': 'server error'}, json_dumps_params={"ensure_ascii": False}) class FileUpload(View): def post(self, request): # data = request.body print('=====================sendPage==================') img = request.FILES.get("file", None) print(img) print(img.name) # 获取文件名称 print(img.chunks) # 获取文件内容 # 创建文件 print('=====================sendPage==================') # 报存到数据库 # FileUpload.objects.create(name=img.name) return HttpResponse("ok")