簡體   English   中英

Django最好在views.py或模板中檢查user.is_authenticated嗎?

[英]Django is it better to check user.is_authenticated in views.py or in template?

我有一個主頁,我想在用戶未登錄時顯示登錄表單,或者如果他/她已登錄則顯示屬於該用戶的項目列表。

到目前為止,我想出了兩種方法:

  1. 檢查用戶是否在views.py中進行了身份驗證並呈現相應的視圖(在我的views.py中 ):

     if request.user.is_authenticated(): return render(request, 'items.html') else return render(request, 'login.html') 
  2. 直接檢查模板並為每個案例生成相應的HTML(在我的index.html中 ):

     {% if user.is_authenticated %} HTML for my items list {% else %} HTML for my login form {% endif %} 

那么哪種方法更適合處理這個? 這些方法的性能差異很大嗎? 我們應該在views.py或模板本身處理這些標准嗎?

我不認為有很大的性能差異。 最重要的是你應該堅持多少MVC模式。

template僅用於顯示view提供的某種數據。 任何類型的邏輯,例如決定基於請求者狀態顯示什么類型的數據,應始終由視圖實現。 因此,您應該將邏輯移動到視圖功能中,以保證設計的清潔。

TL; DR

邏輯應該在你的python代碼中,而不是你的模板盡可能多。 由於維護和未來的原因

闡述

  • 代碼質量 :您可以在python中測試業務邏輯 ,而不是在模板中。 前者提高了您的代碼質量和您作為開發人員的價值;
  • 面向未來 :您不知道您的應用將來會使用哪種技術,因此避免技術混合會在升級時幫助您(您將能夠以不同的速度升級)。
  • 關注點分離原則 :你想要一個意大利面板的代碼,你不能在不影響其他十個人的情況下重構一個東西嗎?
  • 代碼遺產 :您不知道誰將會處理您的代碼,也不知道您將使用哪種代碼。 不要讓他們變得困難(這可能是你未來的自我);
  • 清潔代碼 :用單一方言表達自己總是比混合語言更好;
  • 知識范圍 :前端通常是低編程技能的人(HTML / CSS是聲明性的)的責任,並且您不希望它們弄亂您的業務邏輯。

這取決於你的HTML。 如果您只想根據條件更改代碼的一小部分,請檢查模板內部:

{% if user.is_authenticated %}
    <h3>Welcome</h3>
{% else %}
    <a href="/path/to/login">Login</a>
{% endif %}

但是如果items.htmllogin.html是不同的大模板,那么你一定要在視圖中進行登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM