django - 中间件 django 身份验证
问题描述
我想创建验证用户角色=“级别1”或角色=“级别2”的中间件,如果用户登录级别1,他们只能看到级别1的内容,如果用户登录级别2,他们可以看到级别1和级别2的内容
from django.shortcuts import render
from django.http import HttpResponse
from .forms import loginForm
from .models import memberModel
# Create your views here.
def login(request):
lf = loginForm
return render(request, 'member/login.html', {'lf':lf})
def getLogin(request):
username = request.POST['username']
password = request.POST['password']
user = memberModel.objects.get(username = username)
if (user.password == password):
if (user.role == 'level1'):
return HttpResponse('you are level 1 basic')
else:
return HttpResponse('you are VIP')
else:
return HttpResponse('login fail')
def level1(request):
#if login level 1 and level 2 role can see this
return render(request, 'member/level1.html')
def level2(request):
# only login level 2 role can see this
return render(request, 'member/level2.html')
我该怎么做,请帮忙
解决方案
您可以使用@user_passes_test
装饰器 [Django-doc]:
from django.contrib.auth.decorators import login_required, user_passes_test
require_level2 = user_passes_test(lambda u: u.role == 'level2')
@login_required
def level1(request):
#if login level 1 and level 2 role can see this
return render(request, 'member/level1.html')
@login_required
@require_level2
def level2(request):
# only login level 2 role can see this
return render(request, 'member/level2.html')
推荐阅读
- c++ - 库函数所需的标准输入未阻止调试控制台
- flutter - 将 IOS SDK 库导入 Flutter 插件
- angularjs - 在 Jasmine 2 中模拟 rxjs 去抖动
- c++ - 添加并设置了滚动区域,但没有出现滚动条
- typescript - Readonly<> 类型的继承
- c# - 试图将图像发送到浏览器但它不工作......:/
- c# - C# bouncycastle AsymmetricCipherKeyPair 到字节数组 ECDSA
- kubernetes - 是否可以在单个 API 调用中应用整个清单
- python - 在字典中创建/附加到列表值的更好方法
- javascript - 防止 jQuery 高级新闻代码中的循环(分叉/修改)