【发布时间】:2016-08-02 01:26:00
【问题描述】:
我有一个 Django 应用程序,它完全从 api 获取数据。所以我不必使用数据库。会话数据存储在签名的 cookie 中。我尝试编写自定义用户模型和自定义身份验证后端,如文档中,但我收到以下错误:
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'my_app.MyUser' that has not been installed
我的设置.py:
AUTH_USER_MODEL = 'my_app.MyUser'
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',
'my_app.backends.LoginAuthBackend',)
models.py:
class MyUser(object):
def save(self):
pass
objects = None
username = ""
在这里,如果尝试使用 django 中的 AbstractUser 而不是 Object,我会收到以下错误:AttributeError: 'NoneType' object has no attribute '_meta' 或 db 表不退出。
后端.py
class LoginAuthBackend(object):
def authenticate(self, username=None, password=None):
if username and password:
try:
response = my_auth_function(username, password)
if response.status_code == 200:
token = response.get('my_key')
user = MyUser()
return user
except MyCustomException:
return None
这让我发疯。看起来没有 DB 的 Django 不好用。
编辑
经过多次尝试,解决此问题的简单方法是从设置中删除 'django.contrib.auth.backends.ModelBackend' 和 AUTHENTICATION_BACKENDS 和 AUTH_USER_MODEL。该模型基本上以相同的方式继续。工作顺利
【问题讨论】:
-
是的,Django 非常依赖数据库。它是这样设计的。看起来 Django 身份验证系统确实希望您拥有一个用户模型,并且没有它就无法工作。你可以更加努力地欺骗 Django 接受虚假模型,但你必须实现一大堆特定于模型实例和查询集的接口。
标签: python django python-3.x django-authentication