一个简单的django user.is_authenticated问题
Posted 番茄土豆西红柿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单的django user.is_authenticated问题相关的知识,希望对你有一定的参考价值。
Q1:这是我一个view函数:
def user_info(request): response=HttpResponse() user=request.user user_id=user.id if user.is_authenticated(): is_login=1 else: is_login=0 response.write(‘{"is_login":%s}‘ % str(is_login)) return response
虽然用户已经登陆,但是返回的is_login总是0,也就是没有登陆,这么简单的一个函数,为什么会出错?
A1:
如果你使用is_authenticated()判断用户是否登录,那么意味着你采用了django的auth系统,
那么你的登陆最好使用django.contrib.auth中的login方法,
该方法会为将user_id以及user_backend放入session中存储,
.is_authenticated()通过判断session中是否有user_id 以及user_backend 来判断用户是否登陆。
如果,采用自己的登陆方法,那么有可能没将user_id 或者user_backend 放入session中保存。
所以你的user被django认为没有登录,虽然你已经登陆了。
最好的办法是利用django自己的登陆方法,结合该方法,判断用户是否登陆,从而决定用户的行为。
A2:
如果你要用is_authenticated()来判断用户是否登录,那么登录你也得用django.contrib.auth来处理登录、登出和权限验证,你可以再看看admin那一章
我自己写的话,我一般在session中加标示,后面的请求每次过来都验证一下session,即可判断登录状态,session也比较好控制过期时长。
def VerifyLogin(request): try: if request.session[‘userid‘]: return True except: return False def gotologin(request): string = ‘登录信息已过期,请重新登录‘ return render_to_response(‘gotologin.html‘,{‘string‘:string})
下面处理请求的方法中,调一下VerifyLogin函数就可以验证状态
if request.session[‘userid‘]:
....
esle:
....
以上是关于一个简单的django user.is_authenticated问题的主要内容,如果未能解决你的问题,请参考以下文章