簡體   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