zoukankan      html  css  js  c++  java
  • 一个简单的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:

        ....

  • 相关阅读:
    spring-boot-mybatis-plus-layui 自定义代码生成完整多对一
    spring-boot-jap-layui-mysql 完整的jpa多对一
    IDEA 2020.1 热部署(JRebel)
    IDEA 2020.1 隐藏文件和文件夹
    IDEA 2020.1 修改代码字体和界面字体
    IDEA 2020.1 创建springboot项目(国内脚手架)安装lombok
    tensorflow2.0
    cuda资料收集
    视觉学习资料整理
    std::move and std::forward
  • 原文地址:https://www.cnblogs.com/robinunix/p/7911429.html
Copyright © 2011-2022 走看看