这几天一直在看Django中的Authentication,自己尝试着写了一个小型的Demo。
1 Demo流程图
注意:以上信息的submit均使用forms.Form
2 问题
2.1 无论登陆与否,index.html总是当作没登陆来显示
个人猜测,模板页面上本来是没有默认的request变量的,因为我在用{{request.user}}测试的时候,页面上什么也没有,模板这种对null不报错而是静悄悄的略过的做法给找bug还是带来了一定的难度。解决方案是在render_to_response中的加入context_instance=RequestContext(request),settings.py中加入
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.request"
) 。
2.2 登陆时老是失败,一步一步的debug进去,发现是密码不可用(is_password_usable)
原因是调用create_user时,参数直接写了(username,password),调试的时候才发现原来create_user的第二个参数是email,真是无语了,解决方案自然是明确的标明谁是谁:create_user(username=username,password=password)
3 总结
由于任务来的突然,对于django只能是现学现卖,过程可想而知,摸着石头过河深一脚浅一脚的在所难免,而且总有一些你想象不到的问题像水底的石头一样突然硌你一下。究其原因还是知识结构不够系统,学习django还有很多路要走。
调试bug的时候估计大家的心情都是一样的吧,刚开始是好奇,慢慢的就开始烦躁,随着心情的变糟,智商也会逐渐走低。每当此时,我就想起一句经典的话:一遍又—遍做同一件事,却期望有不同的结果。急躁还是要不得的,急于求成反而会增加时间成本,以后再遇到bug,还是得用冷静和理智来面对。
本文代码:https://github.com/leon27/webdev/tree/master/UserDemo