[英]Python - render with csrf protection
我已经阅读了几篇关于Django中csrf保护的帖子,包括Django的文档 ,但我仍然对如何正确使用它感到困惑。
最清楚的部分是HTML,但Python的有点令人困惑。
表单内的{% csrf_token %}
c = {}
c.update(csrf(request))
在显示和请求信息时,您需要以各种形式使用它,不是吗?
那么,如何在return render()
包含此csrf保护? 它是否正确?
return render(request,'index.html',{'var':var_value})
或者我应该在Python文档示例中包含c
( return 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.