本文和大家分享的主要是Django用户模块的扩展相关知识,希望可以帮助大家更好的学习Django ,一起来看看吧。
Django内置的用户验证系统十分强大。大多数情况下,它可以拿来就用,能帮我们省去很多开发、测试的工作。它能满足大多数的使用情况并且很安全。但是有时候,为满足我们的网络应用需求,需要对它进行一些微调。
一般来说,我们希望更多地存储与用户有关的数据。如果你的网络应用具有社交属性,你可能希望存储用户简介、地理位置以及其他相关的东西。
在此教程里,我将简单呈现扩展Django用户模型的方法,而你并不需要从头开始去实现每一个细节。
扩展现有用户模型的方法
一般来说,有四种不同的方法可以扩展现有用户模型。下面介绍 这四种方法使用的场景。
方法1:使用代理模型
什么是代理模型?
它是一种模型继承,这种模型在数据库中无需创建新表格。它一般被用于改变现有模型的行为方式(例如默认的命令,增加新方法等等),而不影响现有数据库的架构。
什么时候需要用代理模型?
当不需要在数据库中存储额外的信息而仅仅是简单的增加操作方法或更改模型的查询管理方式时,就需要使用代理模型来扩展现有用户模型。
方法2:使用和用户模型一对一的链接(使用Profile扩展User模块)
什么是一对一的链接?
标准的Django模型都会有自己的数据库表,并通过 OneToOneField 与现有用户模型形成一对一的关联。
什么时候使用一对一链接?
当要存储与现有用户模型相关而又与验证过程无关的额外的信息时,就需要使用一对一链接。我们一般称之为用户配置(User Profile)。
方法3:扩展AbstractBaseUser创建自定义用户模型
什么是基于扩展AbstractBaseUser来创建的自定义用户模型?
它是继承于AbstractBaseUser类的一个全新的用户系统。 这需要通过settings.py进行特别的维护和更新一些相关的文件。 理想的情况是,它在项目开始时就已经被设计,因为它对数据库架构影响很大。在执行时都需要额外的维护。
什么时候需要扩展AbstractBaseUser类自定义用户模型呢?
当应用对验证过程具有特殊要求时,那么需要自定义一个用户模型。比如,在一些将邮件地址代替用户名作为验证令牌的情况时,自定义用户模型更合适。
方法4:扩展AbstractUser来创建自定义用户模型
什么是基于扩展AbstractUser创建的自定义用户模型?
它是继承于AbstractUser类的一个全新的用户系统。它也需要通过settings.py进行特别的维护和更新一些相关的文件。理想的情况是,它在项目开始之前就已经被设计,因为它对数据库架构影响很大。在执行时需要额外的维护。
什么时候需要扩展AbstractBaseUser类的自定义用户模型呢?
当你对Django处理 身份 验证 过程很满意而又不会 改 动它时,那可以使用它。或者,你想直接在用户模型中增加一些额外的信息而不想创建新的类 时,也可以使用它。 (像方法2)
使用代理模式来扩充用户模型
这种方法对现有用户模型影响最小而且不会带来任何新的缺陷。但是它在很多方面实现受到限制。
下面是实现它的方法:
from django.contrib.auth.modelsimport Userfrom .managersimport PersonManager
class Person(User):
objects = PersonManager()
class Meta:
proxy = True
ordering = ('first_name', )
def do_something(self):
...
在上面的例子里,我们定义了一个Person代理模型。通过在内部Meta类中添加“proxy=true”属性,我们告诉Django这是个代理模型。
在这个例子中,我已经定义了默认的命