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失败

posted @ 2012-08-15 14:25  小侠女  阅读(1028)  评论(0)    收藏  举报