基于AbstractBaseUser重新定义用户模型
Django的设计哲学
学好一门武功,心法很重要。
学Django也是一样,要学好Django,首先要认可Django的设计哲学,如果对Django不认可,肯定是学不好的。
Django设计哲学:
-
松耦合:降低耦合度同时加强聚合度。
例如:
1)模板系统不需要知道用户的 Web 请求,数据库层不需要了解如果显示数据,而视图并不关心程序员所使用的模板系统。
2)Django 应用中的 URL 不应该与底层 Python 代码耦合。将 URL 与 Python 函数名联系起来是一件很糟糕且丑陋的做法。(Flask说:你是在说我吗?=_=)
- 视图不应该关心开发人员使用哪种模板——甚至根本不用模板系统。
-
更少的代码
Django应用的代码应该尽可能地精简。
例如:缓存应该尽可能快。因此,围绕缓存后端的所有框架代码都应该保持在绝对的最小值,特别是对于“get()”操作。
-
快速开发
Django 可以做到快速的 Web 开发。
-
不要重复地造轮子 (DRY)
每个独特的概念或数据片应该存在且只存在于一个地方。避免冗余,做好标准化。
-
明确优于隐式
字段不应该仅仅根据字段的名称来假定某些行为。这需要对系统有太多了解,并且容易出现错误。相反,其行为应该基于关键字参数,并且在某些情况下,应该基于字段的类型
-
一致性
框架应在所有层级上保持一致。一致性适用于从低级(Python 的编码风格)到高级(使用 Django 的“经验”)的所有内容。
缓存API应该为不同的缓存后端提供一致的接口。
-
从 HTML 中解耦
模板系统不应该被设计成只能输出 HTML。它应该同样擅长生成其他基于文本的格式,或者仅仅是纯文本。(JsonResponse了解一下)
-
简介
编写视图应该和编写Python函数一样简单。开发人员不应该在函数执行时实例化一个类。
Django大法好
- Django开发速度快。例如:纽约时报,卫报,Pinterest和Instagram等网站都是用Django做的。
- Django的用户活跃,文档丰富。
- 你可以在DjangoProject.com上找到丰富的开源项目。
- Django可以非常方便地与memcached、redis一起使用,提高页面的加载速度。
- App 可插拔,一行注释决定是否启用app。
Django User模型好
代码位置:django.contrib.auth.models.User
这个模型中预先定义了一些字段,其中只有username和password是必须的。
优点:
- 自带后台
- 常用的权限功能都已经封装好了,例如:authenticate、logout等。
- authenticate、logout只有对内置的User模型才生效。
满足个性化需求
Django的内置身份验证系统非常棒。在大多数情况下,我们可以开箱即用,节省了大量的开发和测试工作。它适合大多数用例,并且非常安全。但有时我们需要做一些调整,以适应我们的Web应用程序。
基于AbstractBaseUser重新定义用户模型
使用场景:
- 您非常满意Django处理身份验证过程的方式时
- 并且不会更改它的任何内容
- 但又希望直接在用户模型中添加一些额外信息,而不必创建额外的类。
实例:
class User(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
full_name = models.CharField(max_length=255, blank=True, null=True)
is_active = models.BooleanField(default=True) # can login
staff = models.BooleanField(default=False) # staff user non superuser
admin = models.BooleanField(default=False) # superuser
timestamp = models.DateTimeField(auto_now_add=True)
# confirm = models.BooleanField(default=False)
# confirmed_date = models.DateTimeField(default=False)
USERNAME_FIELD = 'email' #username
# USERNAME_FIELD and password are required by default
REQUIRED_FIELDS = [] #['full_name'] #python manage.py createsuperuser
参考资料:
https://github.com/codingforentrepreneurs/eCommerce/blob/master/src/accounts/models.py
https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html
https://docs.djangoproject.com/zh-hans/2.1/misc/design-philosophies/


668

被折叠的 条评论
为什么被折叠?



