Формы, которые используют метод POST, необходимый для защиты CSRF? Я следую за книгой, а примеры кода бросают 403 ошибки. Я сделал некоторые поиски, и кажется, что мне нужно включить CSRF во всех моих формах.Django: Форма POST требует CSRF? GET нет?
Мои вопросы:
ли Django теперь требуют, чтобы все формы POST быть защищен от CSRF?
Все, что мне нужно сделать, чтобы выполнить это добавить 'django.middleware.csrf.CsrfViewMiddleware', обратный render_to_response (шаблон, словарь, context_instance = RequestContext (запрос), и добавить '{% csrf_token%}' в соответствующая форма? Я пропускаю что-нибудь здесь?
Когда я делаю это, форма работает отлично. Если какой-либо из этих частей не хватает, он не 403. Я просто хочу, чтобы убедиться, что я это делаю RIGHT. :)
Заранее спасибо.
редактировать:
По какой-то причине этот код не имеет смысла для меня, но это не возвращать какие-либо ошибки. Пожалуйста, игнорируйте примитивную проверку, поскольку я не попал в раздел книги, где он показывает более эффективный способ сделать это еще.
def contact(request):
errors = []
if request.method == 'POST':
if not request.POST.get('subject',''):
errors.append('Enter a subject')
if not request.POST.get('message',''):
errors.append('Enter a message')
if request.POST.get('email', '') and '@' not in request.POST['email']:
errors.append('Enter a valid email address')
if not errors:
send_mail(
request.POST['subject'],
request.POST['message'],
request.POST.get('email', '[email protected]'), ['[email protected]'],)
return HttpResponseRedirect('/contact/thanks/')
return render_to_response('contact_form.html', { 'errors': errors }, context_instance=RequestContext(request))
Моя проблема связана с последней строкой этой функции просмотра. Он вызывается только если request.method! = POST. Это кажется мне совершенно неправильным. Не следует ли мне называть «context_instance = RequestContext (request)», когда он выполняет POST?