[英]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.