zoukankan      html  css  js  c++  java
  • django的用户认证管理,如何使用session(2)

    继续使用django用户认证,登陆做好了。

    在settings.py里加上:

    TEMPLATE_CONTEXT_PROCESSORS ={
        "django.contrib.auth.context_processors.auth",  
        "django.core.context_processors.debug",  
        "django.core.context_processors.i18n",  
        "django.core.context_processors.media",  
        "django.core.context_processors.request",     
    }
    
    LOGIN_URL = '/Login'

    1:TEMPLATE_CONTEXT_PROCESSORS 用来解析在页面里嵌入的context解析,auth包含了user的info和method。

    2:在每一个不想用户未登录就访问到的页面的view函数上加上这样一个装饰器:

    @login_required
    
    但是这个语句必须首先导入,语句为:
    from django.contrib.auth.decorators import login_required  

    3:LOGIN_URL = '/Login' :让所有加上装饰器的view在未登录状态下返回到login首页。

    python代码:

    def Login(request):
        t = get_template('Login.html')
        c = RequestContext(request,locals())
        return HttpResponse(t.render(c))
    
    def login_view(request):
        username = request.POST.get('user')
        password = request.POST.get('password')
        print username, password
        User = authenticate(username = username, password = password)
         
        if User is not None:
            if User.is_active:
                user_login(request, User)     
                return HttpResponseRedirect("/monitorIndex")
    
            else:
                err = "a 'disabled account' error message"
                return HttpResponseRedirect("/Login")
    
        else:
            err = "user is not exist or password is not correct!"
            #return HttpResponse(err)
            return HttpResponseRedirect("/Login")
                          
                          
    def logout_view(request):
        user_logout(request)
        return HttpResponseRedirect("/Login")

    注意事项:

    1:HttpResponseRedirect("/Login") 和 HttpResponseRedirect("Login")是不一样的,前者直接转到127.0.0.1:8000/Login, 后者是在当前页面后加上/Login. 

    2:之间我有一次抓狂,因为没有对import的login和logout重命名,我自己的view也用了login和logout,怎么看代码都没有错误,一句句的测试,就是定位到login(request,user)执行不成功,但是什么原因还是发现不了, 不报错啊!!后来终于在看了很多博客或者知道里都习惯对导入的login和logout重命名,出于好奇,我也重命名下试试,还果真通过了!郁闷之极,这样的低级错误,真让人抓狂。

    3:再后来,遇到HttpResponseRedirect执行后,在后台检测收到302的status码,可是前端就是不跳转,或者弹出一个alert的框框,由于弹出的框是一个白框,所以我得不到任何提示消息,只有可能是我自己alert出了一个空值,于是一步步调试,最终定位我发出的ajax请求返回了error,但是errorText其实是空。好吧,去掉ajax,登陆请求未必得ajax,事实上是最好不要用!去掉ajax以后,直接用form进行post,HttpResponseRedirect最终执行了!

    4:在我改用django的自带用户认证的时候,最开始没有使用login和logout自带的user登陆退出,http://127.0.0.1:8000/admin 能够进去管理系统,当login 和logout实现后,在使用http://127.0.0.1:8000/admin 出现错误:

    我直接在python manage.py shell 打开shell面板进行如下测试,

    额,reverse成功。。。。。

     

     

    相关资料:

    http://qiaoqinqie.iteye.com/blog/1038332   用户登陆注销注册实现

    http://hi.baidu.com/%D0%C4%B0%B2%D0%BE/blog/item/6fa0ea007d5ab78f0b7b8245.html

    http://zh.wikibooks.org/zh/Django/%E7%94%A8%E6%88%B7%E8%AE%A4%E8%AF%81   

    http://hi.baidu.com/dushm/item/0ce9f336017645f3e6bb7a29

    http://www.douban.com/group/topic/29824577/  logout reverse失败

  • 相关阅读:
    java线程上
    java常用类
    java面向对象4
    java 面向对象三
    java面向对象下
    java面向对象
    java基础下
    Java之Stream流
    JAVA泛型
    英语
  • 原文地址:https://www.cnblogs.com/xiami303/p/2640022.html
Copyright © 2011-2022 走看看