如何在Django通用视图中对登录的用户进行身份验证?

时间:2018-09-12 08:09:08

标签: django django-2.0

Hello to Stack Overflow社区, 我已经在django views.py中创建了登录和注销功能,因此我也成功实现了登录和注销方法,但是我感到困惑,我该如何将已登录用户详细信息的数据传递给views.py中基于类的视图,因为我只希望在发生用户登录时授予对基于类的视图的访问权限

views.py

def admin_login(request):
    context = {}
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user:
            login(request, user)
            context['user'] = request.user
            return redirect('profile')
        else:
            context['error'] = 'Provide Valid Credentials'
            return render(request, "secret_template.html", context)
    else:
        return render(request, "secret_template.html", context)


def admin_logout(request):
        logout(request)
        return redirect('secretview')

我仅在用户登录后才想在视图下方进行身份验证

class index(TemplateView):
    template_name = 'secret_template.html'

2 个答案:

答案 0 :(得分:1)

在您的视图中使用LoginRequiredMixin

from django.contrib.auth.mixins import LoginRequiredMixin

class index(LoginRequiredMixin, TemplateView):
    login_url = reverse_lazy('admin_login') # or whatever
    template_name = 'aapp/index.html'

答案 1 :(得分:1)

在Django文档之后,您会找到一些适合您要求的通用示例: 对于基于函数的视图,您可以简单地使用login_required装饰器。

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    return Something

对于基于类的视图,您有一个带有method_decorator的示例

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

@method_decorator(login_required, name='dispatch')
class ProtectedView(TemplateView):
template_name = 'secret.html'

编辑: 我无法发表评论,因此在此添加: 您可以在自己的views方法中通过request.user处理用户实例。