我有一个Django应用程序,可以完全从apis获取数据。所以我不必使用数据库。会话数据存储在已签名的cookie中。我尝试在文档上编写自定义用户模型和自定义身份验证后端,但是我收到以下错误:
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'my_app.MyUser' that has not been installed
我的settings.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表没有退出。
backends.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
这让我发疯了。看起来Django没有DB就不容易使用。
经过多次尝试后,解决此问题的一种简单方法是从'django.contrib.auth.backends.ModelBackend'
和AUTHENTICATION_BACKENDS
中删除设置中的AUTH_USER_MODEL
。该模型基本上以相同的方式继续。工作顺利
答案 0 :(得分:1)
默认的身份验证后端处理器集在AUTHENTICATION_BACKENDS
设置中定义。请参阅Django文档Customizing authentication。
默认情况下,AUTHENTICATION_BACKENDS设置为:
['django.contrib.auth.backends.ModelBackend']
这是检查Django用户数据库并查询内置权限的基本身份验证后端。
因此,如果您不想使用django.contrib.auth.backends.ModelBackend
身份验证方法,请从列表中删除它。您可能想要找到(或创建)另一个并将其添加到列表中。