检查是不是有人登录 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的主要内容,如果未能解决你的问题,请参考以下文章