不带数据库的Django Rest框架

2024-05-23 17:44:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Django Rest框架设置一个简单的API,问题是我的API没有任何数据库,但是如果没有数据库设置,框架将无法工作。

以下是我在settings.py中的Django Rest框架配置:

INSTALLED_APPS = [
    'provider',
    'django_nose',
    'rest_framework',
    'django.contrib.contenttypes',
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [],
    'DEFAULT_PERMISSION_CLASSES': [],
}

我得到的错误是:

ImproperlyConfigured("settings.DATABASES is improperly configured. "django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

是否有不包括django.contrib.contenttypesdjango.contrib.auth的最小设置?


Tags: django框架restapi数据库defaultsettingsis
3条回答

你别无选择。DATABASESdict应该在settings.py中。您可以使用:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

如果您确实被迫使用数据库,但又不想使用,那么可以将:memory:与SQLite后端一起使用,如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': ':memory:',
    }
}

它使用内存中的数据库,这样就不会触及您的文件系统。

由于内存不稳定,您可能需要在每次启动web应用时自动运行迁移。

问题的实际原因是DRF试图将user属性添加到request。在文件中简要提到,机制如下:

How authentication is determined

If no class authenticates, request.user will be set to an instance of django.contrib.auth.models.AnonymousUser

因此需要django.contrib.auth应用程序才能正确运行,因此django.contrib.auth需要数据库的工作配置才能执行。

解决此问题的方法是将settingsUNAUTHENTICATED_USER属性设置为None

更改后的配置如下:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [],
    'DEFAULT_PERMISSION_CLASSES': [],
    'UNAUTHENTICATED_USER': None,
}

相关问题 更多 >