我正在尝试使用Django Rest Framework设置一个简单的API,问题是我的API没有任何数据库,但如果没有数据库设置,框架将无法运行。
这是我在settings.py
中的Django Rest Framework配置:
INSTALLED_APPS = [
'provider',
'django_nose',
'rest_framework',
'django.contrib.contenttypes',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [],
'DEFAULT_PERMISSION_CLASSES': [],
}
我得到的错误是:
NotperlyConfigured(“settings.DATABASES配置不正确。 “django.core.exceptions.ImproperlyConfigured:settings.DATABASES is 配置不当。请提供ENGINE值。检查设置 文档了解更多详情。
是否有任何不包含django.contrib.contenttypes
和django.contrib.auth
的最小设置?
答案 0 :(得分:7)
如果您真的被迫使用数据库但又不想这样做,可以将:memory:
与SQLite后端一起使用,如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
}
}
这使用内存数据库,因此您的文件系统不会被触及。
由于内存是易变的,因此您可能需要在每次启动Web应用时自动运行迁移。
答案 1 :(得分:7)
问题的实际原因是DRF尝试向user
添加request
属性。文件中简要提到,机制如下:
<强> How authentication is determined 强>
如果没有类认证,
request.user
将被设置为实例django.contrib.auth.models.AnonymousUser
因此需要django.contrib.auth
应用程序正确运行,因此django.contrib.auth
需要数据库的工作配置才能执行。
此问题的解决方案是将设置UNAUTHENTICATED_USER
属性设置为None
。
更改后配置如下:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [],
'DEFAULT_PERMISSION_CLASSES': [],
'UNAUTHENTICATED_USER': None,
}
答案 2 :(得分:1)
你没有任何选择。 DATABASES
字典应位于settings.py
。你可以用这个:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
答案 3 :(得分:-2)
[未经测试]也许您可以使用虚拟后端。我看到django有一个:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.dummy',
}
}