加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django自定义用户模型最佳实践:User = get_user_model()?

发布时间:2020-12-20 12:02:12 所属栏目:Python 来源:网络整理
导读:我正在尝试创建一个自定义用户类,我想知道实现引用新用户的最佳实践.遵循在models.py中实现自定义用户的Django docs方法,如下所示: from django.contrib.auth.models import AbstractUserclass User(AbstractUser): pass 和settings.py AUTH_USER_MODEL = '
我正在尝试创建一个自定义用户类,我想知道实现引用新用户的最佳实践.遵循在models.py中实现自定义用户的Django docs方法,如下所示:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

和settings.py

AUTH_USER_MODEL = 'myapp.MyUser'

和admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User,UserAdmin)

Django文档说使用settings.AUTH_USER_MODEL代替用户专门用于ForeignKeys和OnetoOneField,但是其他实例并不清楚.

我的问题特定于如何在views.py中引用自定义用户类.在定义我正在使用的用户类之前

from django.contrib.auth.models import User

但是在定义自定义类之后,这不再正确.我见过样板代码在views.py的开头使用了这个方法:

from django.contrib.auth import get_user_model

User = get_user_model()

这是引用自定义用户的最佳做法吗?或者我应该只使用settings.AUTH_USER_MODEL代替我之前有用户的位置?

解决方法

使用settings.AUTH_USER_MODEL将在加载所有django应用程序后懒洋洋地加载用户类.在最初加载应用程序时,在模块级别调用get_user_model()可能会导致未加载用户模型应用程序以及循环导入.

更新:我读了两个具体问题:

如何正确访问用户模型,contrib或custom.

Djangos get_user_model()只是使用settings.AUTH_USER_MODEL调用django.apps get_model().如果您正在编写可能在其他项目中与其他用户模型一起使用的应用程序,请使用get_user_model调用.总是.那么用户模型是什么并不重要.

如果您已经创建了自己的core.User模型,并且非常确信您的代码将仅用于此项目,则可以从core.models导入用户也可以使用.

何时从设置中使用字符串表示而不是获取模型.

最后,字符串表示通常会调用相同的django.apps get_model().通过在Foreignkeys,OneToOneFields等中提供字符串而不是类本身,您只需要在django app导入期间查找模型,其中用户模型可能尚未可用.因此,使用字符串表示只是延迟加载模型.所有型号都是如此.

在djangos不同的主要版本中,这种行为也发生了变化,这是另一个话题.请注意,get_user_model()已在Django 1.11中更新以用于导入用法.

https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#referencing-the-user-model

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读