저는 SessionMiddleware를 사용하는 Django 1.9에 응용 프로그램을 가지고 있습니다. 동일한 프로젝트 내에서이 애플리케이션에 대한 API를 만들고 싶습니다만 POST 요청을 할 때 @csrf_exempt 주석이 작동하지 않습니다. 내가 요청을하고있는 중이 야Django @csrf_exempt가 클래스에서 작동하지 않습니다.보기
은 우체부를 던져 그리고 이것은 내가 지금까지 무엇을 가지고 :
settings.py
MIDDLEWARE_CLASSES = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'a9.utils.middleware.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'a9.core.access.middleware.AccessMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
OAUTH2_PROVIDER = {
# this is the list of available scopes
'SCOPES': {'read': 'Read scope', 'write': 'Write scope', 'groups': 'Access to your groups'}
}
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
)
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
#'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
#'rest_framework.authentication.TokenAuthentication',
)
}
urls.py
urlpatterns = [
url(r'^v1/', include([
url(r'^', include(router.urls)),
url(r'^auth/', MyAuthentication.as_view()),
url(r'^o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
url(r'^admin/', include(admin.site.urls)),
])),
]
전망 .py
@method_decorator(csrf_exempt, name='dispatch')
class MyAuthentication(TemplateView):
def post(self, request, *args, **kwargs):
return HttpResponse('Hello, World!')
이 후에는 항상 CSRF 확인에 실패했습니다.
나는이 질문을 django-rest-framework의 IRC 채널에서 물었지만 아직 대답이 없습니다. 제발, 어떤 조언을 매우 극명하게 될 것입니다.
클래스 내에서 ** TemplateView ** 대신 **보기 ** 가져 오기를 시도 했습니까? –
** TemplateView **에 사용할 수있는 게시 방법이 없습니다. –
예, 처음 시도했습니다. 실제로, TemplateView는 View에서 상속받습니다. 따라서 Post 메소드가 있습니다 : https://docs.djangoproject.com/en/1.9/ref/class-based-views/base/#django.views.generic.base.TemplateView – Carlos