一、前言
在開發易於維護的應用程序時,編寫簡單,結構良好的代碼很重要。到目前為止,我們看到的示例太簡單了,難以解釋,但是它們卻帶來了一個問題,因為它們集成了Flask View功能的兩個完全獨立的功能。
視圖功能的作用非常清楚。也就是說,生成對請求的響應。例如,不要告訴我不要使用燒瓶創建簡單的應用程序。如示例所示。這對於簡單的請求就足夠了。但是,在許多情況下,請求會更改應用程序的狀態,並且此更改會在視圖功能中發生。
例如,讓我們假設一個在網站上注冊新用戶的用戶。用戶在表單中輸入電子郵件和密碼,然后單擊“提交”按鈕。服務器接收到包含用戶數據的請求,然后flask將請求分派到處理注冊請求的視圖功能。此視圖函數必須訪問數據庫,添加新用戶,然后向瀏覽器返回響應,指定操作是成功還是失敗。這兩個過程分別稱為業務邏輯和表示邏輯。
業務邏輯和性能邏輯的混合使您的代碼難以理解和維護。假設您要為一個大表編寫HTML代碼。表中的數據通過所需的HTML字符串連接到數據庫讀取的數據。將表示邏輯遷移到模板可以提高應用程序的可維護性。
模板是一個包含響應文本並包含占位符變量表示的動態部分的文件。該特定值僅在請求的上下文中是已知的。用實際值替換變量,然后返回最終響應字符串。此過程稱為渲染。為了渲染模板,flask使用了一個名為Jinja2的強大模板。
示例① hello.py 渲染模板
Flask提供了ender_template()函數,用於將jinja2模板引擎集成到您的應用程序中。該函數的第一個參數是模板文件名,后續參數是代表模板變量的鍵/值對(關鍵字參數)。相應的特定值。在此代碼中,第二個模板中接收到一個名為name的變量。
示例②
二、變量
{{name}}結構在模板中用於表示變量。這是一個特殊的占位符,它告訴模板此值來自渲染模板時使用的數據。
從下面的代碼示例中,不難發現Jinja2可以識別所有變量類型。它還可以識別復雜的類型,例如列表,字典和對象。
在示例②中,通過對context的封裝,就可以在模板中通過變量訪問到context里面的數據。
上述示例代碼的執行差異是登錄狀態和未登錄狀態之間的差異。
三、循環結構
實例③:
在這一部分中,您需要注意最后一行代碼。第一本書傳遞給HTML代碼以供訪問,第二本書是代碼中定義的
書籍。
過濾器可以處理變量並在處理后顯示原始變量。動作對象是變量。\r\n過濾器可以處理變量並在處理后顯示原始變量。動作對象是變量。
為了避免代碼重用,可以使用類似於Python代碼繼承的模板繼承。
以上是繼承的情況。將通用代碼放在base.html(父類)中。在此文件中,您需要將block和endblock用作占位符,並將其替換為您的子類。
Bootstrap是Twitter開發的開源框架,提供用於創建簡單網頁的用戶組件。它還與現代桌面和移動平台Web瀏覽器兼容。我將使用flask-bootstrap擴展名。您可以使用pip安裝。
具有多個路由的應用程序需要鏈接來連接不同的頁面。例如,導航欄。將簡單的根URL直接寫入模板並不困難,但是在包含可變部分的動態路由模板中創建URL卻非常困難。為了避免這些問題,Flask提供了url_for()幫助函數。這將生成一個URL,其中包含存儲在URL映射中的信息。 url_for()函數的最簡單用法是將視圖函數名稱作為參數並返回相應的URL。