django - AUTH_USER_MODEL 是指尚未为自定义身份验证后端安装的模型“base.User”
问题描述
我正在尝试在自定义身份验证模型时自定义身份验证后端,但由于我正在使用get_user_model()
函数而一直面临此错误。
django.core.exceptions.ImproperlyConfigured:AUTH_USER_MODEL 指的是尚未安装的模型'base.User'
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'base.apps.BaseConfig',
'core.apps.AccountsConfig',
'system.apps.SystemConfig',
]
自定义后端:
class UserBackend(object):
def authenticate(self, request, username=None, password=None, **kwargs):
usermodel = User
try:
usr = usermodel.objects.get(username=username)
password_valid = usr.check_password(password)
if usr and password_valid:
return usr
raise PermissionDenied
except usermodel.DoesNotExist:
return PermissionDenied
return None
def get_user(self, user_id):
usermodel = User
try:
return usermodel.objects.get(pk=user_id)
except usermodel.DoesNotExist:
return None
编辑:
设置:
AUTH_USER_MODEL = 'base.User'
AUTHENTICATION_BACKENDS = (
'base.models.UserBackend',
)
base.User
模型:
class User(AbstractUser):
fullname = models.CharField(max_length=35, null=True, blank=True)
picture = models.ManyToManyField('ImageFile', verbose_name="ProfilePicture", blank=True)
bio = models.CharField(max_length=255, null=True, blank=True)
link = models.URLField(null=True, blank=True, default="")
is_private = models.BooleanField(default=False)
is_official = models.BooleanField(default=False)
注意:UserBackend 位于文件末尾且class User(AbstractUser)
位于其上方
解决方案
base.models
文件中有一个导入,from django.contrib.auth.backends import ModelBackend
即使我删除了自定义,也会导致此错误。AUTHENTICATION_BACKENDS
删除此导入后,尽管我将后端类从应用程序中的文件移到了文件中,但一切正常base.models
(backend
我base
认为这没有必要,我只是做了更多可读代码)
推荐阅读
- ruby-on-rails - 名称错误“未初始化的常量”ruby on rails
- python - 为什么相同的列表不指向相同的地址?
- stripe-payments - 如何将资金转移到非关联的 Stripe 账户
- flutter - Flutter:以毫米为单位创建标尺
- networking - 多播场景中的接收者如何知道它应该监听哪个 IP 地址?
- wordpress - 如何在不加载页面的情况下将简单的表单提交转换为 ajax 提交,例如将产品添加到购物车功能
- angular - 如何从角度的单个函数返回订阅和承诺?
- vb.net - VB.Net:Winforms Designer:在父自定义控件中使用自定义控件中的动词
- azure - 在 Azure 中通过 Powershell 执行远程命令,无需脚本
- c# - 需要解释一下,为什么EF核心现在需要使用attach