представление на основе функции не удалось при проверке CSRF в Django 1.11.5 - PullRequest
0 голосов
/ 17 февраля 2019

Я изучаю 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 ]

0 голосов
/ 17 февраля 2019

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

return render (request, 'create.html',{ 'form': form })
0 голосов
/ 17 февраля 2019

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

0 голосов
/ 17 февраля 2019

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

'django.middleware.csrf.CsrfViewMiddleware',
...