Django Rest Framework Without Database
The actual cause of the problem is that DRF trys to add a user
attribute to the request
. Briefly mentioned in the documentation, the mechanism is as follows:
How authentication is determined
If no class authenticates,
request.user
will be set to an instance ofdjango.contrib.auth.models.AnonymousUser
So it needed the django.contrib.auth
application to run correctly, consequently django.contrib.auth
requires a working configuration of Database to be able to perform.
The solution to this problem is to set the settings UNAUTHENTICATED_USER
property to None
.
Configuration will be like this after the changes:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [], 'DEFAULT_PERMISSION_CLASSES': [], 'UNAUTHENTICATED_USER': None,}
If you are really forced to use a database but you don't want to, you can use :memory:
with the SQLite backend, like this:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:', }}
This uses an in-memory database, so that your filesystem won't be touched.
Because memory is volatile, you might need to run migrations automatically every time your web app starts.
You don't have any option. DATABASES
dict should be in settings.py
. You can use this:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }}