我正在使用 Pyhton、Flask 和 GAE 構建我的第一個 Web 應用程式。到目前為止,我已經構建了基本的登錄系統和網站的基本結構。現在我想知道如何在登錄后將我的用戶重定向到我網站的不同版本。
例如,在登錄之前,我的導航欄會顯示一個“登錄”按鈕。登錄后,此按鈕需要替換為“注銷”按鈕。或者我需要在我的導航欄中顯示一些在登錄前無法訪問的頁面。
到目前為止,我的想法是:
- 使用選擇器標記所有需要更改的html和css元素,并在登錄后根據選擇器使用javascript修改頁面。
- 使用 Flask 路由修改我的 python 代碼中的路由
- 在我的 app.yaml 檔案中為 GAE 配置路由
- 配置 jinja 模板,例如這個執行緒中顯示的如何在我登錄到我的燒瓶應用程式后顯示注銷代替登錄/注冊? 我需要為每個需要更改的元素執行此操作,并且可能存在登錄后布局更改的情況,并且此解決方案可能還不夠。
所以我的問題仍然存在。是否有任何最佳實踐,WebDev/Python Flask 中的一般方法是什么。
uj5u.com熱心網友回復:
由于您使用的是 Flask,因此您可以使用 Jinja2 實作您想要的。
選項1
當用戶登錄時,您的 Python 代碼將填充并回傳一個或多個變數,例如
LOGGED_IN_USER (the logged in user id)
USER_EMAIl (logged in user email)
當您的網頁加載時,它會檢查任何這些變數。如果存在,它會顯示一組小部件,例如您的注銷鏈接、用戶名等,如果不存在,它會顯示另一組小部件,例如登錄鏈接。
示例代碼
網頁
<ul class="navbar-nav ml-auto">
<!-- If user is logged in, show their email, logout link
and a link to access their setting -->
{% if LOGGED_IN_USER %}
<li class="nav-item dropdown" >
<a href="" class="dropdown-toggle" data-toggle="dropdown">{{USER_EMAIL}} <span class="caret"></span></a>
<ul class="dropdown-menu" >
<li ><a class="dropdown-item" href="{{LOG_OUT_URL}}">Logout</a></li>
<li ><a class="dropdown-item" href="/settings/">Settings</a></li>
</ul>
</li>
{% else %}
<!-- If user is not logged in, show a login link -->
<li class="nav-item active">
<a class="nav-link" href="/login/">Login</span></a>
</li>
{% endif %}
</ul>
將上述代碼添加到基本模板中,并從模??板繼承任何需要區分登錄/注銷用戶的頁面。
選項 2
有一個帶有變數內容塊的基本模板。為登錄和注銷的用戶提供單獨的 html 頁面,例如logged_in.html、logged_out.html。這 2 個 html 頁面將繼承您的基本模板。
如果用戶已登錄,您的 python 代碼將回傳logged_in.html,如果用戶未登錄,則回傳logged_out.html。
我不知道最佳實踐本身。歸根結底,您嘗試撰寫更少的代碼,同時確保您的代碼對您來說是快速且可讀的(您可以在幾個月后重新閱讀它時理解它)。
就個人而言,我選擇選項 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488521.html
