LOADING

Follow me

Django auth登录
十二月 2, 2013|IT

Django auth登录


  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. 这样登录功能就算完成了。


版权声明:本文为博主原创文章,未经博主允许不得转载。

no comments
Share

发表评论