Я разработал простой веб-сервис, но не использовать пост с Джанго Rest Framework, как он жалуется на CSRF:Джанго Rest Framework жалуясь CSRF
«деталь»: «CSRF Ошибки: CSRF печенье не установлена. "
Удаление api_view декоратора делает остановить сообщение от появляться, но тогда я не буду в состоянии получить доступ к request.data. Я думаю, что api_view проверяет CSRF, хотя я добавил декоратор csrf_exempt.
Это мое мнение:
@permission_classes((IsAuthenticated,))
@csrf_exempt
@api_view(['POST'])
def get_stats(request):
"""
Returns the stats available.
"""
user = request.user
if request.method == 'POST':
serializer = StatsRequestSerializer(data=request.data)
stats_request = serializer.data
return JSONResponse(stats_request)
#serializer = QuizSerializer(user.quizes.all(), many=True)
#return JSONResponse(serializer.data)
response = ActionResponse(status='error', error='Invalid request')
serializer = ActionResponseSerializer(response)
return JSONResponse(serializer.data, status=400)
Это моя модель:
class StatsRequest(models.Model):
"""
A model which describes a request for some stats for specific users.
"""
start_date = models.DateField()
end_date = models.DateField()
и это мой запрос POST:
{"start_date" : "1992-01-15", "end_date" : "1992-01-15" }
Любые идеи?
Подробнее:
AUTHENTICATION_BACKENDS = (
'social.backends.facebook.FacebookOAuth2',
'social.backends.google.GoogleOAuth2',
'django.contrib.auth.backends.ModelBackend'
)
С каждым запросом POST вам необходимо отправить маркер crsf. Есть еще информация об этом в документах https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/#csrf-ajax – Hinrich
@Hinrich: это точка декоратора 'csrf_exempt': обход csrf validation, cf https://docs.djangoproject.com/en/1.8/ref/csrf/#django.views.decorators.csrf.csrf_exempt –
Вы пробовали декодер 'api_view' без' csrf_exempt'? Какую аутентификацию вы используете? – Alasdair