利用Django-registration开源框架自定义适合自己应用的注册验证(1)

来源:互联网 发布:2017淘宝图片尺寸 编辑:程序博客网 时间:2024/06/05 13:34

长话短说,django可重用的的app其实还是有很多拘束,毕竟设计出来不是针对所有应用的。就比如说django-registration 这个开源框架吧,相信好多朋友会对它的功能感兴趣。

它实现了发邮件验证注册的功能。看官方文档 http://django-registration.readthedocs.org/en/latest/ ,它只提供了两种用法deflaut 和simple 。试用后发现效果不尽人意,因为form提供的字段只有4个 username,email,password,password(again)。你一定会想,注册用户的时候性别和部门也是必不可少的,虽然他们可以留着注册完后编辑profile来实现赋值入库。但是总感觉怪怪的,因为如果你构建的是社交应用,性别是首选注册要填写的内容吧

首先说一下我的开发环境:

  1. django1.6
  2. IDE:PyCharm(真的很好用 比wingide强多了 最赞的是有bash窗口 有run工具集)
  3. 注册用户所用的django-registration (下载地址)-> https://pypi.python.org/pypi/django-registration/这里我啰嗦一下,为什么要用源码而不用pip install djang-registration(当然省事你可以这样做)。因为会涉及到其他应用的配置问题,除非你只开发一个app。把源码解压(不要去install 或者python setup.py )直接把源码中关于可重用app的文件夹放到你的工程文件夹中 然后在settings文件中设置一下installed_app就ok了,如果syncdb出现no module namedXXX的错误,去看看你添加到工程文件夹下的文件夹中是否含有__init__.py和models.py文件。没有的话创建一个空的就行
好了,接下来就到正题了:

我们首先要做的就是扩展auth.user模型,因为user模型中字段少的可怜,就比如我们需要添加department(部门)字段.网络上有好多方法大家都可以google到,大致分为三种,一种是利用OneToOneFiled,一种是重写User,当然你也可以暴力修改源代码了。可能还有许多巧妙高效的方法,这里不再阐述,逼近博主才入门不久,就拿最简单的OneToOne来说吧

为了良好的编程和层次习惯,强烈建议创建account或者customuser类似意思的app,这里我们就叫customuser吧。创建customuser的目的很简单,就是为了扩展auth.user而来的。直接上码吧

from django.db import modelsfrom django.contrib.auth.models import Userfrom django.db.models.signals import post_savefrom django.dispatch import receiverclass Customuser(models.Model):    user        = models.OneToOneField(User)    department  = models.CharField(max_length=100)@receiver(post_save, sender = User)def create_customuser(sender, instance,created, **kwargs):    if created:        Customuser.objects.get_or_create(user = instance)
很简单吧,Customuser就是为了扩展user而创建的model 它拥有一个和User OneToOne的字段这样就把他们两关联起来了,下面的@receiver包装器是为了发送signal信号用的,如果你不懂signal,那也没关系。你就这样理解,User模型是发送者,Customuser是接受者,当User被创建了(if created:)就会去给Customuser模型发送消或者说是信号吧(signla),这样Customuser就会接收到发送者的参数,创建一个和具体发送信号的User实例关联的Customuser实例(它会把这个User实例存储在自己的user字段下)

接下来你就可以去浏览器下登录admin观察了,你会发现当你每创建一个user对象的时候 customuser都会自动创建一个object。(记得在admin.py中注册Customuser模型)

现在进入正题了,如何把刚刚扩展的department字段添加到django-registration的注册表单中去。

先把registration文件夹重命名,然后它放入你的工程目录下。(下图是我修改前后的树状图,我已经把没用的文件都删掉了,registration中的backends 我没用,我自己创建了backends然后添加了__init__.py,models.py文件,urls.py 和 views.py中的代码和源代码是差不多的)

            

完成了这步后  就可以随便修改eleregistration了 记得备份一份(registration ),改坏了还可以重头再来嘛

注意:一下代码以(Eleuser)eleuser 充当Customuser

修改之前,先说说eleregistration下forms,models,views这三个py文件的功能和作用。forms 是提供表单模型的,相当于context。views 是负责调度和template渲染的,models 中有负责注册的模型和对模型的管理者。看代码细说把 forms.py:


在form中添加所需的字段

 department = forms.CharField(label=(u'Department'))
 form中的修改就这一处啦,当然你也可以添加更多的字段,前提是你在Customuser模型中有这些字段

看看models.py:


models的改动也很少就添加了

 <span style="white-space:pre"></span>new_eleuser = Eleuser.objects.get(user = new_user)        new_eleuser.department = department        new_eleuser.save()
是找到和相关user的eleuser 然后给字段赋值保存的过程

views.py中的代码都不用修改

最后来看看自定义backends中的代码:


修改了源文件中的view名,添加了department字段

ok了 现在看看settings文件中的修改:


把backends 最为app添加了,这样就可以在urls中include了


相关的templates 还有修改过的eleregistration 有需要的 我可以mail

写的少,写的不好,看不懂的请细问  谢谢

0 0
原创粉丝点击