文章目录
2019-2-14 14:25:20
数据需求分析
- 根据实际情况,将菜单、权限、岗位、用户进行匹配关联(后台管理里面做好)
- 用户登录后,需要获取这个用户有哪些权限
- 将用户信息进行提取,并将该信息重新整理
- 根据整理后的信息保存起来发给template,进行匹配对应的一级菜单、二级菜单、权限等
-----------------------------------------------------------------------
#init_menu初始化用户数据
from host import models
class InitMenu(object):
def initMenu(self,username):
obj = models.UserInfo.objects.filter(username=username).first()
menu_list = []
one_menu = {}
for i in models.Menu.objects.all():
menu_list.append(i.title)
one_menu[i.title] = {}
# print('menu_list----->>>', one_menu)
if obj:
a = obj.roles.all().first().permissions.all()
# print(a)
for i in a:
for j in range(0, len(menu_list)):
try:
if i.menu.title == menu_list[j]:
# one_menu['主机管理']={}
one_menu[menu_list[j]][i.title] = i.url
except KeyError:
print('5555555')
print('menu_list----->>>', one_menu)
return one_menu
#数据结果类似:
menu_list-- -- - >>> {
'用户管理': {
'显示用户': '/user/',
'增加用户': '/user/add/',
'删除用户': '/user/delete',
'更新用户': '/user/update/(//d+)/'
},
'API管理': {
'salt': '/salt/'
},
'主机管理': {
'新增主机': '/host/add/',
'更新主机': '/host/update/(//d+)/',
'删除主机': '/host/delete',
'显示主机': '/host/hostpage/'
},
'权限管理': {}
}
-----------------------------------------------------------------------
#views.py获取用户信息
from builtins import locals
from django.shortcuts import render,HttpResponse,redirect
from host import models
from django.views import View
from utils import form_class,init_menu
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.utils.decorators import method_decorator
from django.contrib.auth.hashers import make_password, check_password
import hashlib
class login(View):
def get(self,request):
form = form_class.UserForm()
return render(request, 'login.html',locals())
def post(self,request):
form = form_class.UserForm(request.POST)
#判断输入数据是否存在
if form.is_valid():
user = form.cleaned_data['user']
pwd = form.cleaned_data['pwd']
# pwd = make_password(form.cleaned_data.get('pwd'),'pbkdf2_sha256')
# print(pwd)
obj = models.UserInfo.objects.filter(username=user).first()
one_menu=init_menu.InitMenu().initMenu(user)
#print('全体散开',one_menu)
#判断用户名是否存在
if obj:
#判断密码是否对应正确,使用django自带加密算法功能
if check_password(pwd,obj.password):
obj1 = models.UserInfo.objects.filter(username=user).first().roles.all()
menu_list = []
permission_list =[]
obj2 = models.Menu.objects.all()
for i in obj2:
if i.title not in menu_list:
menu_list.append(i.title)
request.session['menu_list'] = menu_list
for i in obj1:
for j in i.permissions.all():
permission_list.append(j.url)
request.session['permission_list']=permission_list
request.session['one_menu']=one_menu
return render(request, 'hostpage.html', locals())
else:
#密码不正确
error_msg = '用户名或密码错误!'
return render(request, 'login.html', locals())
else:
# 密码不正确
error_msg = '用户名或密码错误!'
return render(request,'login.html',locals())
#如果输入数据不存在
else:
form = form_class.UserForm(request.POST)
return render(request, 'login.html',locals())