Django auth登录

标签: Django python 学习笔记python
1091人阅读 评论(0) 收藏 举报
  1. 注册action里,除了现实注册功能外,紧接着还进行了登录功能。
  2. _login(request,username,password)是我们写的可重用方法,因为在login里会用得到,所以我们抽象出来了,其中里面实现的东西,大多是应用auth模块的内置函数。代码:
  3. def _login(request,username,password):
  4.     '''登陆核心方法'''
  5.     ret=False
  6.     user=authenticate(username=username,password=password)
  7.     if user:
  8.         if user.is_active:
  9.             auth_login(request,user)
  10.             ret=True
  11.         else:
  12.             messages.add_message(request, messages.INFO, _(u'用户没有激活'))
  13.     else:
  14.         messages.add_message(request, messages.INFO, _(u'用户不存在'))
  15.     return ret

  16. 其中authenticate和auth_login事关键的函数,需要在auth模块里import出来:
  17. from django.contrib.auth import authenticate, login as auth_login ,logout as auth_logout
  18. auth_login是我们起的一个别名,原名是login,我们起别名是防止命名冲突,再者更好理解点。authenticate顾名思义,是通过昵称和密码 验证该用户,返回一个User实体;login内部进行不少的操作(初始化必要的request字段),但我们暂且不用关心这些,我们只需知道传一个用户实体,它会帮我们做好登录操作即可。
  19. _login(request,username,password)抽象出来,我们接下来做登录视图的时候,用到它。代码如下:
  20. def login(request):
  21.     '''登陆视图'''
  22.     template_var={}
  23.     form = LoginForm()    
  24.     if request.method == 'POST':
  25.         form=LoginForm(request.POST.copy())
  26.         if form.is_valid():
  27.             _login(request,form.cleaned_data["username"],form.cleaned_data["password"])
  28.             return HttpResponseRedirect(reverse("index"))
  29.     template_var["form"]=form        
  30.     return render_to_response("accounts/login.html",template_var,\
  31.                                    context_instance=RequestContext(request))
  32. 这个视图流程和注册流程相似,首先初始化未绑定的相应的表单,当点击登录按钮的时候,views会验证输入的数据是否合格,合格后才做相应的操作,也就是登录操作,我们上面已经写好了登录的方法_login,直接引用即可。
  33. 其中LoginForm 是登录的form,这是我们在写views时预先做好的,仅仅两个字段:昵称和密码:
  34. class LoginForm(forms.Form):
  35.     username=forms.CharField(label=_(u"昵称"),max_length=30,widget=forms.TextInput(attrs={'size': 20,}))
  36.     password=forms.CharField(label=_(u"密码"),max_length=30,widget=forms.PasswordInput(attrs={'size': 20,}))

  37. 这个比注册的form简单些,没有做手动的验证,只是生成表单用。

  38. 这样登录功能就算完成了。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:351726次
    • 积分:8887
    • 等级:
    • 排名:第2107名
    • 原创:527篇
    • 转载:34篇
    • 译文:13篇
    • 评论:40条
    我的站点

    这里只是我的备份地方

    DCOS
    博客专栏
    文章分类