2016-08-23 7 views
3

) Django Rest Framework를 사용하여 간단한 API를 설정하려고하는데 문제는 내 API에 데이터베이스가 없지만 프레임 워크가 데이터베이스 설정없이 작동하지 않는다는 것입니다.Django Rest Framework 데이터베이스없이 (

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

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

내가 가진 오류는 다음과 같습니다 :

여기 settings.py 내 장고 나머지 프레임 워크 구성입니다. "settings.DATABASES가 잘못 구성되어 "

ImproperlyConfigured (django.core. 예외 : 올바르게 설정 됨 : 설정. 데이터베이스가 잘못 구성되었습니다. 엔진 값을 입력하십시오. 자세한 내용은 설정 설명서를 확인하십시오.

django.contrib.contenttypesdjango.contrib.auth이 포함되지 않은 최소 설정이 있습니까?

+0

이 때 해당 오류가 발생 했습니까? 왜 contenttypes 응용 프로그램이 필요합니까? – Linovia

+0

DB를 사용하지 않고 해당 문제에 부딪치지 않은 API가 있습니다. – Linovia

+0

@Linovia contenttypes 응용 프로그램 및 인증 응용 프로그램이 필요하지 않지만 이들이 없으면 작동하지 않습니다. DB를 사용하지 않고 API로만 사용되는 최소한의 장고 휴식 프레임 워크 설정을 게시 할 수 있습니까? – kahrabian

답변

4

실제 문제의 원인은 속성을 request에 추가하려고 시도했기 때문입니다. 간단히 문서에 언급 메커니즘은 다음과 같다 : 그래서이 필요

How authentication is determined

더 클래스가 인증하지 않는 경우

, request.userdjango.contrib.auth.models.AnonymousUser

의 인스턴스로 설정됩니다 django.contrib.auth 응용 프로그램을 제대로 실행하려면 결과적으로 django.contrib.auth이 수행 할 수 있도록 Database의 작업 구성이 필요합니다.

이 문제를 해결하려면 UNAUTHENTICATED_USER 속성을 None으로 설정하십시오.

구성 변경 후 다음과 같이 될 것입니다 :

INSTALLED_APPS = [ 
    'provider', 
    'django_nose', 
    'rest_framework', 
] 

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

옵션이 없습니다. DATABASES dict은 settings.py이어야합니다. 이것을 사용할 수 있습니다 :

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

sqlite만큼 작은 데이터베이스도없이 API를 설정하려고합니다. – kahrabian

+0

왜? 거기에 어떤 이유가 있습니까? – turkus

+0

중복되어 있으므로 다른 용도로 사용할 수 없습니다. – kahrabian

-1

[테스트되지 않음] 아마도 더미 백엔드를 사용할 수 있습니다.

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

: 당신이 정말로 데이터베이스를 사용하도록 강요하지만,이처럼 SQLite는 백엔드와 :memory:를 사용하지 않으려면

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.dummy', 
    } 
} 
+0

아, 아마도 그렇지 않을 수도 있습니다. https://github.com/django/django/blob/master/django/db/backends/dummy/base.py 이것은 실제로 그것이 불평하는 것입니다. 예외를 제기하는 대신에 그냥 "통과"하십시오. 누가 작동하는지 알고있는 사람 – pleasedontbelong

5

: 나는 장고에서 하나있다 참조 이것은 메모리 내 데이터베이스를 사용하므로 파일 시스템에는 영향을 미치지 않습니다.

메모리가 휘발성이기 때문에 웹 응용 프로그램이 시작될 때마다 자동으로 마이 그 레이션을 실행해야 할 수 있습니다.

+1

더 자세히 설명해 주시겠습니까? – kahrabian

+0

즉, 서버의 디스크 공간을 사용하는 대신 RAM을 사용하게됩니다. 그게 전부입니다. 그러나이를 수행 할 필요가 없습니다. 일부는 파일을 사용하도록 제안 했으므로 사용하지 않아도됩니다. 이 옵션을 사용하면 sqlite 파일을 볼 수 없으며 종료 후에는 삭제됩니다. 두 가지 옵션 모두 유용합니다. –

관련 문제