更新django项目:将html表单方法从GET更改为POST

时间:2012-08-28 23:26:02

标签: html django forms post

我是django的新手,并制作了一个方法:使用复选框/文本框和提交按钮获取表单。我想将其更改为一种方法:POST表单,但不断收到错误消息:

  

失败原因:

     

CSRF令牌丢失或不正确。

     

通常,当存在真正的跨站点请求伪造,或者Django的CSRF机制未正确使用时,可能会发生这种情况。对于POST表单,您需要确保:

     

您的浏览器正在接受Cookie。

     

view函数使用RequestContext代替Context。

     

在模板中,每个POST表单中都有一个{%csrf_token%}模板标记,用于定位内部网址。

     

如果您不使用CsrfViewMiddleware,则必须在使用csrf_token模板标记的任何视图以及接受POST数据的视图上使用csrf_protect。

我试图改变debuger所说的所有东西,但我一直得到同样的错误。我想知道除了views.py,模板文件(.html)和settings.py文件之外还有其他任何我需要更改的文件:

views.py:

from django.template import RequestContext, loader
from crunchApp.models import Filter
from django.http import HttpResponse
from django.core.context_processors import csrf
from django.shortcuts import render_to_response, get_object_or_404
from django.http import Http404    

def results(request):

    c = {}
    c.update(csrf(request))
    return render_to_response('crunchApp/results.html', c)

模板/的test.html

    <form name="myform" action="results" method = "post" >{% csrf_token %}
        <fieldset>
            <input type="checkbox" value="total_money" id = "money_check" name="check" /> Filter by Total Money</br>
    </fieldset></form>

settings.py

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)

1 个答案:

答案 0 :(得分:0)

你不应该

c = {}
c.update(csrf(request))

但你确实需要context_instance = RequestContext(request),如

render_to_response(<template>, <vars>, context_instance=RequestContext(request))