La méthode POST retourne toujours 403 Interdit

J'ai lu Django - CSRF échec de la vérification de et plusieurs questions (et réponses) liées à django et la méthode POST. L'un des meilleurs-mais-pas-de travail-pour moi, la réponse est https://stackoverflow.com/a/4707639/755319

Toutes les réponses suggèrent au moins 3 choses:

  1. Utilisation RequestContext en tant que troisième paramètre de render_to_response_call
  2. Ajouter {% csrf_token %} dans chaque formulaire avec la méthode POST
  3. Vérifier la MIDDLEWARE_CLASSES dans settings.py

J'ai fait exactement comme il est suggéré, mais l'erreur est apparu. J'utilise django 1.3.1 (à partir d'ubuntu 12.04 référentiel) et python 2.7 (par défaut d'ubuntu)

C'est mon point de Vue:

# Create your views here.
from django.template import RequestContext
from django.http import HttpResponse
from django.shortcuts import render_to_response
from models import BookModel

def index(request):
    return HttpResponse('Welcome to the library')

def search_form(request):
    return render_to_response('library/search_form.html')

def search(request):
    if request.method=='POST':
        if 'q' in request.POST:
            q=request.POST['q']
            bookModel = BookModel.objects.filter(title__icontains=q)
            result = {'books' : bookModel,}
            return render_to_response('library/search.html', result, context_instance=RequestContext(request))
        else:
            return search_form(request)
    else:
        return search_form(request)

et c'est mon modèle (search_form.html):

{% extends "base.html" %}
{% block content %}
<form action="/library/search/" method="post">
    {% csrf_token %} 
    <input type="text" name="q">
    <input type="submit" value="Search">
</form>
{% endblock %}

J'ai redémarré le serveur, mais 403 forbidden erreur est toujours là, en disant que CSRF échec de la vérification.

J'ai 2 questions:

  1. Comment corriger cette erreur?
  2. Pourquoi est-il si difficile de faire un "POST" dans django, je veux dire, est-il une raison particulière de faire en sorte verbose (je viens de PHP, et n'a jamais trouvé un tel problème avant)?

source d'informationauteur goFrendiAsgard