Представление на основе функции не удалось при проверке CSRF в Django 1.11.5

Я учу Django, создав блог-сайт. Но при попытке использовать представление на основе функций для создания сообщения проверка CSRF не удалась.

С помощью csrf_exempt Декоратор мог создать пост без ошибок. Но для безопасности нужно использовать защиту CSRF, кто-нибудь может помочь с решением, пожалуйста?

Django=1.11.5
Python=3.6.8

views.py

def post_create(request):
    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            new_post = form.save(commit=False)
            new_post.author = request.user
            new_post.save()
            return HttpResponseRedirect('/')
    else:
        form = PostForm()
    return render_to_response('create.html',{ 'form': form })

create.html

<h2>Create your post here.</h2>
<form method="POST" enctype="multipart/form-data">
     {% csrf_token %}
     {{ form.as_p }}
     <input type="submit" value="CREATE">
</form>

3 ответа

Решение

Вы не должны использовать render_to_response, использование render который запускает процессоры контекста, такие как тот, который вставляет токен csrf.

return render (request, 'create.html',{ 'form': form })

В вашем settings.py в MIDDLEWARE раздел добавить это:

'django.middleware.csrf.CsrfViewMiddleware',

Заменив render_to_response на render, очищает эту проверку CSRF не удалось. Но не знаете, как это работает? Кто-нибудь объясните, пожалуйста, что происходит?

Другие вопросы по тегам