中间件django身份验证
我想创建对用户role=“level1”或role=“level2”进行身份验证的中间件 如果用户登录级别1,他们只能看到级别1的内容,如果用户登录级别2,他们可以看到级别1和级别2的内容中间件django身份验证,django,authentication,middleware,Django,Authentication,Middleware,我想创建对用户role=“level1”或role=“level2”进行身份验证的中间件 如果用户登录级别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
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')
我如何才能做到这一点,请帮助您可以利用:
从django.contrib.auth.decorators导入所需登录名,用户通过测试
require_level2=用户通过测试(lambda u:u.role=='level2')
@需要登录
def级别1(请求):
#如果登录级别1和级别2角色可以看到这一点
返回呈现(请求'member/level1.html')
@需要登录
@需要2级
def级别2(请求):
#只有登录级别2的角色才能看到这一点
返回呈现(请求'member/level2.html')
您可以使用:
从django.contrib.auth.decorators导入所需登录名,用户通过测试
require_level2=用户通过测试(lambda u:u.role=='level2')
@需要登录
def级别1(请求):
#如果登录级别1和级别2角色可以看到这一点
返回呈现(请求'member/level1.html')
@需要登录
@需要2级
def级别2(请求):
#只有登录级别2的角色才能看到这一点
return render(请求'member/level2.html')
密码是散列的,因此user.password==password
不是一个好主意。这就是Django有一个身份验证(…)
function.yep我知道,但我想深入了解初学者的学习:))密码是散列的,所以user.password==password
不是一个好主意。这就是为什么Django有一个authenticate(…)
function.yep我知道,但我想深入了解初学者的学习:)
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')