Django通过session和装饰器实现登录状态的监控和不同登录权限访问页面控制
1. session使用
session类似于cookie,
session在服务器端,cookie存在于客户端,
session本身是一个键值对,可以向其中注入表示权限的信息,在需要时从中取出信息,从而根据信息判断用户的权限。
首先在你的登录代码中添加session
# 此代码在view.py中
def c_login(request):
if request.method == 'POST':
username = request.POST.get('ReID', None)
password = request.POST.get('Password')
# print(username, password)
if Register.objects.filter(ReID=username, Password=password).exists():
temp = Register.objects.values("Authority").filter(ReID=username, Password=password)
# 通过session监测登录状态(已经可以用)
request.session['authority'] = temp[0].get("Authority")
# 通过cookie监测登录状态,可以设置登录有效时间,暂时无法使用
response = HttpResponseRedirect('/index/')
response.set_cookie('username', username, 3600)
# print(temp[0].get("Authority"))
if temp[0].get("Authority") == 1: # 得到并检查权限(注册时设置)
return redirect('管理员页')
else:
return redirect('index')
else:
# 返回错误信息,在html中以{{错误}}接收
return render(request, '登录', {'错误': '用户名或密码错误!'})
return render(request, '登录')
2. 函数装饰器
函数装饰器是python中一种特殊的函数
通过@function来实现
可以写在一个单独的mydecorator.py文件中
通过import引入,
例如from myapp.mydecorator import login_decorator_1。
在mydecorator.py文件中函数装饰器代码如下
# 此代码在mydecorator.py中
def login_decorator_1(func):
def method(request, *args, **kwargs):
if request.session.has_key("authority") and request.session['authority'] >= 1:
# 如果登陆了并且权限大于1
print(request.session['authority'])
return func(request, *args, **kwargs) # 运行函数
else:
red = HttpResponseRedirect("/index/") # 重定向到index
red.set_cookie("url", request.get_full_path())
return red
return method
3. 最后在要检测的网页代码前添加此函数装饰器
代码如下:
# 此代码在view.py中
@login_decorator_1
def c_admin(request):
return render(request, '管理员页')
综上所述,可以实现在django登陆后监控登陆状态,并且根据登录权限控制访问的页面。

浙公网安备 33010602011771号