码迷,mamicode.com
首页 > 其他好文 > 详细

一个简单的django user.is_authenticated问题

时间:2017-11-28 19:48:36      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:cat   没有   为什么   djang   比较   got   权限   使用   时长   

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问题

标签:cat   没有   为什么   djang   比较   got   权限   使用   时长   

原文地址:http://www.cnblogs.com/robinunix/p/7911429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!