Django auth注册

原创 2013年12月02日 07:08:38
  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 就是把构造好的实体 保存到数据库里了。
版权声明:csdn只作为备份地,欢迎访问zoues.com

相关文章推荐

Django Auth注册

建立level_1项目:django-admin.py startproject level_1新建Accounts App: cd level_1manage.py startapp account...

Laravel 5.1 集成 Auth 验证用户注册登录示例

Laravel 5 集成了 Auth 功能,并且包含了一个注册登录功能,通过这个集成,可以轻松实现用户用户注册登录,下文作为一个简易 Demo 示例如何使用。 参考:Database Setup La...
  • maxsky
  • maxsky
  • 2017年01月08日 00:40
  • 1022

laravel 5.2 注册登录(自带) php artisan make:auth

laravel5.2 验证有所改动,增加了一个叫guard的东西,这个东西主要是负责检查用户的session之类的 原文有提到: https://laravel.com/docs/5.2/aut...
  • IT_jian
  • IT_jian
  • 2017年03月15日 11:15
  • 1309

验证django 用户认证auth模块常见方法使用.

更多0   在用 django 改造某些旧系统的时候,由于原来的用户设计不可能按照django  的 auth 模块的用户表那样设计的,当然你可以硬扩展成那样,但必须保证不影响别的系统,所以在...

Django auth登录

注册action里,除了现实注册功能外,紧接着还进行了登录功能。_login(request,username,password)是我们写的可重用方法,因为在login里会用得到,所以我们抽象出来了,...

django_openstack_auth源码分析与集成

前言最近做一个比较简单的WEB应用,展示一些openstack简单的内容,认证总是要集成的,看了下django_openstack_auth组件,它本身是可以作为django应用的认证后端的,于是打算...

django 自定义auth的中间件的验证

今天在做django的用户验证这块的功能,想用django自带的auth的验证等现有的方法。从网上查到,auth的使用,详见:http://my.oschina.net/u/569730/blog/3...

django.contirb.auth-认证

摘要 django自带了一个认证模块,它利用middlerware在request里增加了user属性,用来获取认证用户的信息。认证后台采用session存储。它自带的User模型,也可以支持自定义扩...

不修改Django源码让admin中的Model列表按注册顺序显示

不修改Django源码让admin中的Model列表按注册顺序显示 博客分类:  Django Python Django Admin Model 顺序 ordering ...

Django 笔记 user 注册 登录 及 权限

#urls.pyfrom django.conf.urls import url from django.contrib import adminurlpatterns = [ url(r'^...
  • hunyxv
  • hunyxv
  • 2016年10月20日 18:17
  • 264
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Django auth注册
举报原因:
原因补充:

(最多只允许输入30个字)