没有数据库的Django Rest框架

时间:2016-08-23 09:58:14

标签: python django django-rest-framework

我正在尝试使用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.contenttypesdjango.contrib.auth的最小设置?

4 个答案:

答案 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',
    }
}