Django auth注册

  1. 我们把一个字典变量template_var传递给模板welcome.html,默认欢迎辞为:欢迎您游客! 如果用户登录了,把用户名加上,request.user.is_authenticated()是request里的一个方法,用于判断用户是否登录。刚开始,是没有任何用户的,所以request.user.is_authenticated()将返回一个False,等我们注册了一个用户,登录了,便能认证了。

  2. 接下来我们写注册的功能。注册涉及到表单的提交,很自然我们就想到了django 的form,使用form生成表单,才能把表单的东西提交给views。
  3. 注册表单我们简单点,只有邮件,昵称和密码这三个输入框,form这样写:
  4. class RegisterForm(forms.Form):
  5.     email=forms.EmailField(label=_(u"邮件"),max_length=30,widget=forms.TextInput(attrs={'size': 30,}))    
  6.     password=forms.CharField(label=_(u"密码"),max_length=30,widget=forms.PasswordInput(attrs={'size': 20,}))
  7.     username=forms.CharField(label=_(u"昵称"),max_length=30,widget=forms.TextInput(attrs={'size': 20,}))
    def clean_username(self):

   
   
   
   
  1. users = User.objects.filter(username__iexact=self.cleaned_data["username"])
  2. '''验证重复昵称'''
  3. if not users:
  4. return self.cleaned_data["username"]
  5. raise forms.ValidationError(_(u"该昵称已经被使用请使用其他的昵称"))
  6. def clean_email(self):
  7. '''验证重复email'''
  8. emails = User.objects.filter(email__iexact=self.cleaned_data["email"])
  9. if not emails:
  10. return self.cleaned_data["email"]
  11. raise forms.ValidationError(_(u"该邮箱已经被使用请使用其他的"))
  12. 表单的三个字段,forms.EmailField和forms.CharField都解析成html的input类型,其中EmailField字段会验证email格式的字符;widget=forms.PasswordInput顾名思义,会额外解析成type类型为密码型的input。
  13. RegisterForm有两个子方法,clean_username会到数据库找输入的昵称,检查是否有重复的昵称,起到验证的作用;clean_email同样验证是否有重复的邮件账号。两个子方法里使用到User实体,这是Django内置的用户实体,对应一个用户表。filter是model的过滤方法,字段_iexact 相当 where 字段 like '%参数%' 只是不区分大小写。
  14. form写好了,相当django生成表单的html,到views了,views将和form紧密结合,根据表单提交的数据做一些必要操作。请看代码:
  15. def register(request):
  16. '''注册视图'''
  17. template_var={}
  18. form = RegisterForm()
  19. if request.method=="POST":
  20. form=RegisterForm(request.POST.copy())
  21. if form.is_valid():
  22. username=form.cleaned_data["username"]
  23. email=form.cleaned_data["email"]
  24. password=form.cleaned_data["password"]
  25. user=User.objects.create_user(username,email,password)
  26. user.save()
  27. _login(request,username,password)#注册完毕 直接登陆
  28. return HttpResponseRedirect(reverse("index"))
  29. template_var["form"]=form
  30. return render_to_response("accounts/register.html",template_var,\
  31. context_instance=RequestContext(request))
  32. form初始的状态是未绑定数据的html代码,我们传给模板egister.html ,结果是三个空的input表单。当点击注册按钮提交数据时,form有个函数is_valid,是验证数据是否都符合条件。如果符合,直接填充给User实体,User.objects.create_user(username,email,password)就是构造出一个完整的实体,该方法便是User类内置的,很方便吧,不用再造轮子,重写注册的方法。user.save 就是把构造好的实体 保存到数据库里了。

你可能感兴趣的:(django,python,python,学习笔记)