【问题标题】:Middleware django authenticate中间件 django 身份验证
【发布时间】:2020-07-26 15:18:29
【问题描述】:

我想创建对用户角色 = "level1' 或角色 = "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')

我该怎么做,请帮忙

【问题讨论】:

  • 密码是散列的,所以user.password == password 不是一个好主意。这就是为什么 Django 有一个 authenticate(..) 函数。
  • 是的,我知道,但我想深入了解初学者的学习:))

标签: django authentication middleware


【解决方案1】:

您可以使用@user_passes_test decorator [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')

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2019-03-15
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多