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 import json # Create your views here. def index(request): data = { 'name': { 'firstname': 'Tom', 'lastname': 'john' }, 'age': 18, 'sex': '男' } return JsonResponse(data, json_dumps_params={"ensure_ascii": False}) # class cbv(View): # def get(self,request): # print(request) # print(request.GET.get('username')) # return JsonResponse({'method':'get','data':request.GET}) # def post(self,request): # return JsonResponse({'method':'post','data':request.POST}) # def put(self,request): # return JsonResponse({'method':'put'}) # def delete(self,request): # return JsonResponse({'method':'delete'}) # class extend_cbv(cbv): # # 重写post请求 # def post(self,request): # return JsonResponse({'method':'post','msg':'重写post请求'},json_dumps_params={"ensure_ascii":False}) 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, }) else: return JsonResponse({'code': 1, 'result': {'message': 'error'}}, 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, 'result': {'message': 'no role,create role'}}, json_dumps_params={"ensure_ascii": False}) class addUser(View): def post(self, request): data = json.loads(request.body) menuIdList = data.pop('menus') menus = Menu.objects.all().filter(id__in=menuIdList) # print(menus) # data.menus = menus print(data) print('--------------data------------') if User.objects.all().filter(username=data.get('username')): return JsonResponse({'code': 1, 'result': {'error': '该角色名已被占用'}}, 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(View): def post(self, request): data = json.loads(request.body) user = User.objects.all().filter(id=data.get('id')).first() if user: 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, 'result': {'data': '修改成功'}}, json_dumps_params={"ensure_ascii": False}) else: return JsonResponse({'code': 1, 'result': {'data': '查无此人'}}, json_dumps_params={"ensure_ascii": False}) # userObj = User.objects.create(**data) # userObj.menus.set(menus) 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, 'result': {'data': '查无此人'}}, json_dumps_params={"ensure_ascii": False}) except Exception as e: print(e) return JsonResponse({'code': 1, 'result': {'data': '服务端错误'}}, json_dumps_params={"ensure_ascii": False}) class getMenuListById(View): def post(self, request): # 获取参数id userId = json.loads(request.body).get('id') # 当前用户 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}}) class add_menu(View): def post(self, request): data = request.POST Menu.objects.create(**data) return JsonResponse({'code': 1, 'error': '菜单添加成功'})