django授权
需要授权。已经阅读了几篇文章,阅读了所有内置机制,接受它并付诸实践。他开始做这件事 注册采用模块django注册,自己编写登录,使用libdjango授权,django,authentication,Django,Authentication,需要授权。已经阅读了几篇文章,阅读了所有内置机制,接受它并付诸实践。他开始做这件事 注册采用模块django注册,自己编写登录,使用libdjango.contrib.auth。如下所示:我在登录页面登录,看起来一切正常,但当我转到另一个页面时,授权奇迹般地消失了。据我所知,授权并没有写入会话,我只在登录页面获得授权 我做了以下工作: 在登录页面上授权 将整个用户对象记录到会话 在每个页面上,当页面加载时,我检查的第一件事是会话数据中是否有User,如果有,从那里读取 源代码如下所示: def
django.contrib.auth
。如下所示:我在登录页面登录,看起来一切正常,但当我转到另一个页面时,授权奇迹般地消失了。据我所知,授权并没有写入会话,我只在登录页面获得授权
我做了以下工作:
用户
对象记录到会话
User
,如果有,从那里读取def login_user(request):
state = "Please log in below..."
username = password = ''
if request.POST:
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
state = "You're successfully logged in!"
else:
state = "Your account is not active, please contact the site admin."
else:
state = "Your username and/or password were incorrect."
request.session['user'] = user
return render(request,'auth.html',{'state':state, 'username': username, 'info':'info'})
以及我从会话
中阅读的页面:
@csrf_protect
def home(request):
if "user" in request.session:
user = request.session['user']
else:
user = None
return render_to_response('home.html', {'user_name' : user}, context_instance = RequestContext(request))
但我认为,这是一种非常愚蠢的方式。你能建议一个更合适的方法吗?我真的不确定你想要实现什么。用户登录后,您可以访问
request.user.is\u authenticated()
以检查视图中是否有经过身份验证的用户,或访问用户本身的request.user
。您不需要将用户添加到会话中;这是由身份验证中间件自动完成的
您也不需要手动检查用户;使用
结合这一点,您的登录视图将变成:
def login_user(request):
state = "Please log in below..."
username = password = ''
if request.POST:
username = request.POST.get('username')
password = request.POST.get('password')
else:
return redirect('login/')
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
state = "You're successfully logged in!"
else:
state = "Your account is not active, please contact the site admin."
else:
state = "Your username and/or password were incorrect."
return render(request,'auth.html',{'state':state, 'info':'info'})
在你的其他观点中:
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
@csrf_protect
@login_required
def home(request):
return render(request, 'home.html')
在模板中(从中):
{%if user.u经过身份验证%}
欢迎,{{user.username}}。感谢您登录
{%else%}
欢迎新用户。请登录
{%endif%}
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}