Метод POST всегда возвращает 403 Forbidden

Я прочитал Джанго - проверка CSRF не удаласьи несколько вопросов (и ответов) связанные с методом django и POST. Одним из лучших, но не работающих для меня ответов является https://stackoverflow.com/a/4707639/755319

Все утвержденные ответы предлагают по крайней мере 3 вещи:

  1. Используйте RequestContext в качестве третьего параметра render_to_response_call
  2. Добавьте {% csrf_token %} во всех формах с помощью метода POST
  3. Проверьте MIDDLEWARE_CLASSES в settings.py

Я сделал именно так, как предлагал, но ошибка все равно появилась. Я использую django 1.3.1 (из репозитория ubuntu 12.04) и python 2.7 (по умолчанию из ubuntu)

Это мое представление:

# 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)

и это мой шаблон (search_form.html):

{% extends "base.html" %}
{% block content %}
{% csrf_token %}
{% endblock %}

Я перезапустил сервер, но запрещенная ошибка 403 все еще там, говоря, что проверка CSRF не удалась.

У меня 2 вопроса:

  1. Как исправить эту ошибку?
  2. Почему так трудно сделать "POST" в django, я имею в виду, есть ли какая-то конкретная причина сделать его таким многословным (я родом из PHP, и никогда не находил такой проблемы раньше)?

13
задан Community 23 May 2017 в 12:16
поделиться