繁体   English   中英

Python - 使用csrf保护进行渲染

[英]Python - render with csrf protection

我已经阅读了几篇关于Django中csrf保护的帖子,包括Django的文档 ,但我仍然对如何正确使用它感到困惑。

最清楚的部分是HTML,但Python的有点令人困惑。

HTML

表单内的{% csrf_token %}

蟒蛇

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

在显示和请求信息时,您需要以各种形式使用它,不是吗?


那么,如何在return render()包含此csrf保护? 它是否正确?

return render(request,'index.html',{'var':var_value})

或者我应该在Python文档示例中包含creturn render_to_response("a_template.html", c) )。 或者,如果它是正确的,它是否包含在request变量中?


并且,当不需要使用csrf时,因为我没有任何形式。 这是将值返回到模板的正确形式吗?

return render(request,'index.html',{'var':var_value})

使用render快捷方式的关键是它会自动运行所有上下文处理器。 上下文处理器是很有用的小函数,每次渲染模板时都会向模板上下文添加各种内容。 并且有一个内置的上下文处理器,已经为您添加了CSRF令牌。 因此,如果使用render ,除了在模板中输出令牌之外别无其他功能。

据我所知,Django有自己的csrf保护中间件,可以为您透明地处理外包。 只需在表单中包含{% csrf_token %} CSR请求对于POST请求是必需的(除了您使用@csrf_exempt装饰器)。 所以一个表格将是:

<form action="." method="post">
{% csrf_token %}
 your input fields and submit button...
</form>

希望这可以帮助。

只要您在设置文件中的MIDDLEWARE_CLASSES变量中列出了“django.middleware.csrf.CsrfViewMiddleware”,您就应该在模板中使用{%csrf_token%}。

在文档中有更多有用的信息: https//docs.djangoproject.com/en/dev/ref/contrib/csrf/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM