2013-03-23 3 views
0

Я осуществил следующий пример из djangobook, chapter 7, Tying Form objects into views (я использую Django1.4):Пример Djangobook: POST без {% csrf_token%} и передачи context_instance = RequestContext (запрос). Как?

# views.py 

from django.shortcuts import render_to_response 
from mysite.contact.forms import ContactForm 

def contact(request): 
    if request.method == 'POST': 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
      send_mail(
       cd['subject'], 
       cd['message'], 
       cd.get('email', '[email protected]'), 
       ['[email protected]'], 
      ) 
      return HttpResponseRedirect('/contact/thanks/') 
    else: 
     form = ContactForm() 
    return render_to_response('contact_form.html', {'form': form}) 

# contact_form.html 

<html> 
<head> 
    <title>Contact us</title> 
</head> 
<body> 
    <h1>Contact us</h1> 

    {% if form.errors %} 
     <p style="color: red;"> 
      Please correct the error{{ form.errors|pluralize }} below. 
     </p> 
    {% endif %} 

    <form action="" method="post"> 
     <table> 
      {{ form.as_table }} 
     </table> 
     <input type="submit" value="Submit"> 
    </form> 
</body> 
</html> 

Когда я иду в URL, что я привязан к этой точке зрения и представить форму, я получаю Forbidden(403) CSRF verification failed, Request aborted. Я должен был добавить {% csrf_token %} после <form action="" method="post"> и передать context_instance=RequestContext(request) в render_to_response, чтобы заставить его работать. Есть ли что-то, что я делал неправильно/некоторые настройки, которые я наблюдал, потому что я не понимаю, как автор получил этот пример, работая без поправок, которые мне пришлось сделать. Btw Я ничего не менял из конфигурации настроек по умолчанию.

ответ

1

Книга Django написана с использованием Django 1.0 или 1.1. Защита CSRF была изменена в версии 1.2, так что вам нужно явно вставить токен.

+0

Я предположил, что эта часть уже обновлена ​​для django 1.4. В заявлении говорится, что авторы получают его обновление для 1.4-1.5, а URL-адрес - 'djangobook/en/2.0'. У вас есть идея, какие части обновлены для 1.4? Возможно, было бы полезно указать для каждой главы, для какой версии она применима. – Bentley4