Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django模板中的CSRF验证_Python_Django_Templates_Csrf - Fatal编程技术网

Python django模板中的CSRF验证

Python django模板中的CSRF验证,python,django,templates,csrf,Python,Django,Templates,Csrf,我试图在我的自定义模板标记中创建一个表单,然后尝试在那里创建一个HTML表单,然后在我的模板中简单地使用它,但是当用户提交表单时,我得到了CSRF验证失败错误(这是很自然的,因为我没有在模板标记中提供带有CSRF_标记的表单),我是这样做的: @register.simple_tag(takes_context=True) def change_password_(context): csrf = context.get('csrf_token', '') html = "<

我试图在我的自定义模板标记中创建一个表单,然后尝试在那里创建一个HTML表单,然后在我的模板中简单地使用它,但是当用户提交表单时,我得到了CSRF验证失败错误(这是很自然的,因为我没有在模板标记中提供带有CSRF_标记的表单),我是这样做的:

@register.simple_tag(takes_context=True)
def change_password_(context):
    csrf = context.get('csrf_token', '')
    html = "<form action='{% url change_password %}' method='post' id='renew_password' >"
    csrf_string = str(csrf)
    html += "<input type='hidden' value='%' />" %csrf_string
....
@register.simple\u标记(接受上下文=True)
def更改密码(上下文):
csrf=context.get('csrf_标记','')
html=“”
csrf_字符串=str(csrf)
html+=“”%csrf\u字符串
....
但我仍然收到CSRF验证失败错误:(知道如何使其工作吗?

谢谢

您需要一个
{%csrf\u token%}
在表单标签后面,而不是隐藏的输入


阅读了解更多信息。

查看我使用tempates制作的表单,我有以下代码片段:

<form action="" method="post">
<div style='display:none'><input type='hidden'  name='csrfmiddlewaretoken'
value='e987effa0c6ee111225a3c0edc927b06' /></div><table>


也许这会让您了解如何将其直接放入标记中。首先,尝试在模板标记中打印
csrf
,或者检查呈现的html,以确保模板标记从模板上下文成功获取
csrf\u标记

其次,您的csrf标记没有名称属性。请尝试以下操作:

html += "<input type='hidden' name='csrfmiddlewaretoken' value='%' />" %csrf_string
html+=“”%csrf\u字符串

最后,我会考虑将模板标签写为AN。它将把HTML移动到一个单独的模板,它看起来更整洁。然后可以使用<代码> {%CSRFYToM币%}。


在标记的模板文件中。

我是从TemplateTag执行此操作的,它不是模板(它是python代码)嗯,当你有一个令牌的静态值时,这怎么可能有任何用处呢?当然,我的令牌对OP没有任何用处。我只是用我的代码片段作为例子,因为OP似乎知道如何获取自己的令牌。问题似乎是“name”属性,当我添加该属性时它起作用:)谢谢