Я прочитал Django - проверка CSRF не удалась и несколько вопросов (и ответов), связанных с методом django и POST. Один из ответов "лучший, но не работающий для меня" qaru.site/info/364619/...
Все утвержденные ответы предполагают как минимум 3 вещи:
- Использовать RequestContext в качестве третьего параметра render_to_response_call
- Добавить {% csrf_token%} в каждой форме с методом POST
- Проверьте 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 %}
<form action="/library/search/" method="post">
{% csrf_token %}
<input type="text" name="q">
<input type="submit" value="Search">
</form>
{% endblock %}
Я перезапустил сервер, но 403 запрещенная ошибка все еще существует, сообщив, что проверка CSRF не удалась.
У меня есть 2 вопроса:
- Как исправить эту ошибку?
- Почему так сложно сделать "POST" в django, я имею в виду, есть ли какая-то конкретная причина сделать его настолько подробным (я пришел из PHP и никогда не обнаруживал такую проблему раньше)?