继续使用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登陆退出, 能够进去管理系统,当login 和logout实现后,在使用 出现错误:
我直接在python manage.py shell 打开shell面板进行如下测试,
额,reverse成功。。。。。
相关资料:
用户登陆注销注册实现
logout reverse失败