die*_*con 5 python django django-models
我正在Django中创建一个应用程序,到目前为止,我一直在使用扩展用户模型,如下所示:
class MyUser(AbstractBaseUser):
...
Run Code Online (Sandbox Code Playgroud)
所有的用户和个人资料信息,但我看到很多人为配置文件创建不同的模型和用户自己在堆栈溢出,使用OneToOneField,虽然这些大多是旧问题.我的问题是:哪个更好,如果不是最好的,每个解决方案的优势是什么?谢谢!
这取决于您要执行的操作-如果您对Django最新版本中的User模型感到满意,则应该使用它-很简单,并且会获得很多功能-例如一个相当不错的权限系统,您可以确保与所有第三方模块兼容。但是,如果您需要在User模型上进行扩展,那么操作起来非常简单。您可能会发现,将来需要向模型中添加比预期更多的方法。
使用单独的UserProfile / User模型看到的示例大部分都是django <1.5的遗留物,这是扩展User模型的推荐方法。没有理由再遵循这种模式了-必须在要一个模型的情况下使用两个模型,这需要做很多工作
如果您要开始一个新的Django项目,则应始终创建自己的自定义用户模型,该模型将AbstractUser根据Django文档从继承,即
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
Run Code Online (Sandbox Code Playgroud)
即使您不需要任何其他功能。这样做的原因是,您只需花费很少的精力,将来就可以轻松自定义用户对象。在User运行初始迁移后,用您自己的对象替换内置对象非常费力,除非您能够删除所有数据和迁移并重新开始。
小智 5
我在Django文档中找到了一些有用的信息:
扩展Django的默认用户¶
如果您对Django的用户模型完全满意,并且只想添加一些其他配置文件信息,则可以简单地将django.contrib.auth.models.AbstractUser子类化,并添加自定义配置文件字段,尽管我们建议使用单独的模型作为在指定自定义用户模型的“模型设计注意事项”说明中进行了说明。AbstractUser作为默认模型提供了默认User的完整实现。
和:
模型设计注意事项
在处理与自定义用户模型中与身份验证不直接相关的信息之前,请仔细考虑。
最好在与用户模型有关系的模型中存储特定于应用程序的用户信息。这样一来,每个应用程序都可以指定自己的用户数据要求,而不会冒与其他应用程序发生冲突的风险。另一方面,检索此相关信息的查询将涉及数据库联接,这可能会影响性能。
因此,如果我正确阅读它,则意味着这些字段与身份验证有关,那么您应该考虑替代原始的用户模型。但是,如果不相关,例如个人资料字段(例如生日)或profile_image,那么您可能想要创建一个引用原始用户模型的独立应用。
我找到了一个很好的教程:http : //riceball.com/d/content/django-18-tutoria-52-adding-user-profile
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |