Python Django身份验证,登录问题
问题澄清: 我试图测试每个页面请求的用户是否经过身份验证 我第一次尝试在Django中使用身份验证,但我没有掌握登录视图应该如何处理身份验证 当我使用@login\u required时,我将重定向到“/login”以检查用户是否已登录,如果未登录,则显示登录页面。然而,试图重定向回原始页面会导致无限循环,因为它会一次又一次地将我发送回登录页面 我显然不明白@login\u required应该如何工作,但我不确定我遗漏了什么。我已经搜索了一段时间了,但是每个人都使用默认的@login\u required,没有'login\u url'参数 比如说。。我试图访问的页面将是Python Django身份验证,登录问题,python,django,session,authentication,login,Python,Django,Session,Authentication,Login,问题澄清: 我试图测试每个页面请求的用户是否经过身份验证 我第一次尝试在Django中使用身份验证,但我没有掌握登录视图应该如何处理身份验证 当我使用@login\u required时,我将重定向到“/login”以检查用户是否已登录,如果未登录,则显示登录页面。然而,试图重定向回原始页面会导致无限循环,因为它会一次又一次地将我发送回登录页面 我显然不明白@login\u required应该如何工作,但我不确定我遗漏了什么。我已经搜索了一段时间了,但是每个人都使用默认的@login\u re
@login_required(login_url='/login')
def index(request):
然后我的登录名是。。(显然不完整)
编辑:请注意。。会话变量在另一个视图中设置
def login(request):
if '_auth_user_id' in request.session:
# just for testing purposes.. to make sure the id is being set
print "id:",request.session['_auth_user_id']
try:
user = Users.objects.get(id=request.session['_auth_user_id'])
except:
raise Exception("Invalid UserID")
# TODO: Check the backend session key
# this is what I'm having trouble with.. I'm not sure how
# to redirect back to the proper view
return redirect('/')
else:
form = LoginForm()
return render_to_response('login.html',
{'form':form},
context_instance=RequestContext(request)
)
正如你所说,很明显这是行不通的,因为它是不完整的。因此,在完成之前,您将得到一个无限循环-因为您尚未编写将
\u auth\u user\u id
放入request.session的代码
但我真的不知道你为什么要做这个测试。对于如何编写登录视图,有一个非常好的示例:从表单中获取用户名和密码,将它们发送到authenticate
以获取用户对象,然后将其传递到login
。。。完成了
编辑我想我可以看出你的困惑所在。login\u required
decorator本身检查用户是否已登录-这正是它的作用。您不需要编写任何代码来实现这一点。您的工作是编写用户实际登录的代码,方法是调用authenticate
和login
尝试调用login(),请参见下一步:
您不使用的原因是什么?对不起,您的用户在哪里进行登录操作?我的意思是在哪里调用方法登录来登录他?@isbadawi谢谢。这就是我要找的。。。至少有一部分。这不是我真正遇到的问题。。我正在尝试测试每个请求的用户是否经过身份验证。呃。。。什么?如果用户未经身份验证,则
login\u required
decorator会将其重定向到登录视图,您可以按照我的链接所示编写该视图。您实际上没有登录您的用户。“login\u required decorator本身会检查用户是否登录-这正是它的目的”。。。这就是我要找的。我没有注意到“user\u passes\u test”签入,我在后台有一些自定义的东西,所以看起来我需要编写自己的登录所需的装饰程序。