Представление на основе функции не удалось при проверке 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 не удалось. Но не знаете, как это работает? Кто-нибудь объясните, пожалуйста, что происходит?