检查是不是有人登录 Django

Posted

技术标签:

【中文标题】检查是不是有人登录 Django【英文标题】:Check if there is someone logged in Django检查是否有人登录 Django 【发布时间】:2018-05-22 08:34:09 【问题描述】:

我正在处理一个新的 django 项目。我正在集成框架附带的 Django 用户登录和注销服务。我有一个视图,在视图内,我想检查request.user 中是否有user 对象。如果没有,我想重定向到登录页面。如果request.user 中有user,我想显示用户主页。我怎样才能做到这一点。这是我的代码:

def home(request):
    if not request.user:
        return redirect('login')
    else:
        User = request.user
        profile = Profile.objects.get(user = User)
        parameters = 
            'user':User,
            'profile':profile,
        
        return render(request, 'user/home.html', parameters)

如果有用户登录,它可以工作,但如果没有用户登录,它就不起作用......

【问题讨论】:

例子很多***.com/a/3644910/2282638 【参考方案1】:

你有两个选择,

选项 1:

要检查用户是否在您的视图中登录(经过身份验证的用户),请使用“is_authenticated”,如下例所示:

from django.shortcuts import render, redirect

def home(request):
    if not request.user.is_authenticated:
        print('no, the user is not logged-in')
        return redirect('login')
      
    return render(request, 'user/home.html', parameters)

选项 2:

通过使用'login_required'装饰器:

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required(login_url='/login')  #url you want to redirected to 
def home(request):
    return render(request, 'user/home.html', parameters)

这只是示例,请根据您的要求进行更改。

我希望这对你有帮助。

【讨论】:

【参考方案2】:

姜戈provides a decorator for this:

from django.contrib.auth.decorators import login_required

@login_required
def home(request):
    # at this point you know you _always_ have an authenticated user
    user = request.user
    profile = Profile.objects.get(user=user)
    context = 
        'user':user,
        'profile':profile,
    
    return render(request, 'user/home.html', context)

【讨论】:

【参考方案3】:
def home(request):
    if not request.user.is_authenticated:
        return redirect('login')
    else:
        User = request.user
        profile = Profile.objects.get(user = User)
        parameters = 
            'user':User,
            'profile':profile,
        
        return render(request, 'user/home.html', parameters)

您需要检查用户是否经过身份验证,如果您检查request.user django 将默认返回匿名用户

【讨论】:

请注意,is_authenticated 在 Django 1.10 中被制成属性而不是方法。 你不需要else,因为如果用户没有登录它就会返回

以上是关于检查是不是有人登录 Django的主要内容,如果未能解决你的问题,请参考以下文章

如何检查是不是启用了登录?

使用错误凭据的 Django 登录返回 200 而不是 401

如何检查哪个用户使用 Django 登录?

Django 登录检查-自动重定向到登录页

Vue JS:检查用户登录是不是在我的代码中不起作用

检查会话是不是存在 JSF