我已经看过很多论坛和帖子,但仍然无法掌握它。 Here in django doc,它说
默认情况下,在MIDDLEWARE设置中激活CSRF中间件。如果您覆盖该设置,请记住' django.middleware.csrf.CsrfViewMiddleware'应该在任何观点之前出现>假设已经处理了CSRF攻击的中间件。
如果您禁用了它(不推荐使用),则可以对要保护的特定视图使用csrf_protect()(参见下文)。
在任何使用POST表单的模板中,请使用>内的csrf_token标记。如果表单用于内部URL,则为元素,例如:
表单行动 {%csrf_token%}
基于此,在我的html模板中,我做了一下:
<form id='frm' name='frm' method="post" action="{% url 'gettip' %}" >
{% csrf_token %}
<input type="text" name="tipid" name="tipid">
<input type="submit" value="Get Tip Value"/>
</form>
我期望CSRF_token创建隐藏元素,因为中间件已经加载。我看不到表单中的元素,我收到CSRF错误。
表单与任何模型无关。我还没有使用forms.py。我目前的观点只是输出一些东西:
def gettip(request):
if request.POST:
return HttpResponse('You requested a tip')
#from a weblink, i was told to add the following but it made no difference
context = {}
return render_to_response('tip.html',context, context_instance=RequestContext(request))
我得到的错误显然是CSRF丢失,因为隐藏元素根本不存在。
我正在从PHP迁移,这让我很难过。虽然我的表单不是用于登录目的,但我couldn't get this one to work either表示同样的错误。我在django 1.10上,只是想在提交表单时得到积极的回应。
答案 0 :(得分:0)
不要使用<record id="custom_id" model="ir.actions.act_window">
<field name="name">Maintenance Requests</field>
<field name="res_model">Your_model</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{
'search_default_category_id': [active_id],
'default_category_id': active_id,
'default_fieldname': 'your_custom_value' or anyfieldname
}</field>
</record>
,它已经过时了。请改用render_to_response
。
render
如果包含表单的模板由另一个视图呈现,则您还必须修复该视图。