中间件django身份验证

中间件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

我想创建对用户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 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')