python前端学习-------Flask框架基础(建议收藏)
Flask框架基礎
- 下載并安裝Flask框架
- Flask基礎
- 第一個Flask應用
- 開啟調試模式
- 路由
- 變量規則
- 構造URL
- HTTP方法
- 模板
- 語法格式
- 模板變量
- 控制結構
- 條件控制語句 `if`
- for 循環
- 宏 `macro`
- `include`
- 繼承(`block`)
- Web 表單
- 安裝`flask-wtf`
- CSRF 保護和驗證
- 表單類
- 藍圖
- 創建藍圖
- 注冊藍圖
下載并安裝Flask框架
Flask依賴于兩個外部庫——Werkceug和Jnija 2。Werkrcup是一個WSGI(在Web應用和多種服務器之間的標準Python接口)工具集,Jnija 2負責渲染模板。所以,在安裝Flask時,會自動安裝這兩個庫。
為了更好地管理Python應用,通常情況下會在虛擬環境中安裝Flask框架。安裝命令如下:
安裝完成后可以通過一下命令查看是否存在:
pip listFlask基礎
第一個Flask應用
#導入庫 from flask import Flask app = Flask(__name__) #創建一個Flask實例@app.route('/') def index(): # 視圖函數return 'Hello World!'if __name__ == '__main__':app.run()在PyCharm中運行,運行結果
其中的網址可以在本機瀏覽器中打開,會顯示出 Hello World
那么,這段代碼做了什么?
- 導入了Flask類。
- 創建該類的一個實例。第一個參數是應用模塊或者包的名稱,如果使用單一模塊,名稱為_ name _。模塊的名稱將會因其作為單獨應用啟動還是作為模塊導入而有不同。這樣Flask才知道到哪兒去找模板、靜態文件等。
- 使用route() 裝飾器告訴Flask什么樣的URL能觸發執行被裝飾的函數。 裝飾器告訴Flask什么樣的URL能觸發執行被裝飾的函數。
- 這個被裝飾的函數就是視圖函數,它返回顯示在用戶瀏覽器中的信息。 5行:這個被裝飾的函數就是視圖函數,它返回顯示在用戶瀏覽器中的信息。
- 使用run()函數來讓應用運行在本地服務器上。其中“if _ name _ main _”
可確保服務器只在該腳本被Python解釋器直接執行時才會運行。
開啟調試模式
雖然run()方法適用于啟動本地的開發服務器,但是每次修改代碼后都要手動重啟它,這樣顯然比較煩瑣。此時可以啟用Flask調試模式解決。
有兩種途徑來啟用調試模式。一種是直接在應用對象上設置,示例代碼如下:
app.debug = True app.run()另一種方法
app.run(debug = True)此外還可以在參數中設置端口(這樣網址也會跟著變化)
app.run( debug = True port = 8000 )路由
客戶端(如Web瀏覽器)把請求發送給Web服務器后,Web服務器會把請求發送給Flask程序實例。程序實例需要知道對每個URL請求運行哪些代碼,所以保存了一個URL到Pybon函數的映射關系。處理URL和函數之間關系的程序稱為路由。
在Flask程序中,定義路由的最簡便方式是使用程序實例提供的app. route裝飾器,把裝飾的函數注冊為路由。路由映射關系如圖6.5所示。
變量規則
有時候URL是動態的時候,可以給URL添加變量部分,標記為 "<變量名>格式,它將會作為命名參數傳遞到函數"
from flask import Flask,url_for,redirectapp = Flask(__name__)@app.route('/') def index():return 'Hello World!'@app.route('/user/<username>') def show_user_profile(username):# 顯示該用戶名的用戶信息return f'用戶名是:{username}'@app.route('/post/<int:post_id>') def show_post(post_id):# 根據ID顯示文章,ID是整型數據return f'ID是:{post_id}'if __name__ == '__main__':app.run(debug = True)如 輸入網址http://127.0.0.1:5000/ user/andy,會顯示
用戶名是: andy構造URL
- 可以使用url_for()函數來個指定的函數構造URL,這樣當輸入這個網址時,會自動調用該函數。
- 經常會結合redirect()函數來實現界面跳轉。
- 需要從Flask 庫中導入
HTTP方法
HTTP(與Web應用會話的協議)有許多不同的訪問URL方法。默認情況下,路由只回應GET請求,通過route()裝飾器傳遞methods參數可以改變這個行為。例如:
@app.route('/login',methods = ['GET','POST'])模板
模板是一個包含響應文本的文件,其中包含用占位變量表示的動態部分,其具體值只在請求的上下文中才能知道。使用真實值替換變量,再返回最終得到的響應字符串,這一過程稱為渲染。為了渲染模板,Flask使用了一個名為
Jinja2的強大模板引擎。
語法格式
render_template('tempalta_name.html',temolate_val = name)- 第一個參數是渲染的模板名稱
- 其余為模板中變量的值
如:
return render_template('user.html',username = name)如果在視圖函數中調用上面代碼,則會渲染tempales目錄下的user.html模板文件,并將模板文件中的{{username]}使用name的值代替。
ps:
- user.html是在tempales文件夾中,且tempales文件夾必須要與 運行的文件(調用它的文件)同級。
模板變量
{{value}}用兩個花括號將模板變量包住。
可以使用過濾器修改變量,如
常用的過濾器
| safe | 渲染時不轉義 |
| capitalize | 把值得首字母變大寫,其余變小寫 |
| lower | 都變成小寫 |
| upper | 都變成大寫 |
| title | 把值中每個單詞的首字母都變成大寫 |
| trim | 把值得首尾空格去掉 |
| striptags | 渲染之前把值中所有的HTML標簽去掉 |
控制結構
條件控制語句 if
# 如果 user 為真執行上面的語句 {% if user %} Hello,{{user}}! {% else%} Hello,Stranger! {%endif%} #結束標記for 循環
常用來渲染一組元素
<ul> { % for comment in comments %} <li>{{comment}}</li> {%endfor %} #結束標記 <ul/>宏 macro
類似于Python中的函數
{ % macro render_comment(comment) %} <li>{{comment}} </li> {% endmacro %}<ul> { % for comment in comments %} #使用宏 {{render_comment(comment) }} {%endfor %} #結束標記 <ul/>可以將宏單獨存到文件中,在使用的時候再導入
# macros.html 文件內容 { % macro render_comment(comment) %} <li>{{comment}} </li> {% endmacro %}{ % import 'macros.html' as macros %} <ul> { % for comment in comments %} #使用宏,macros {{macros.render_comment(comment) }} {%endfor %} #結束標記 <ul/>include
需要在多處重復使用的模板代碼片段,可以寫到單獨的文件,再包含到所以模板中,以避免重復
{ % include 'common.html'%}繼承(block)
創建一個名為 base.html的基模板
<html> <head> </head> <body> { %block body %} {% endblock %} </body> </html>block 標簽定義的元素可以在衍生模板中修改
{ % extends "base.html" %} { %block body %} <h1>Hello ,World</h1> {% endblock %}extends指令聲明這個模板衍生自base,.html。在extends指令之后,基模板中的body塊被重新定義,模板引擎會將其插入適當的位置。
Web 表單
安裝flask-wtf
pip install flask-wtf此外還要在PyCharm中添加,否則會報錯
點擊左上角的file,選擇settings
然后點擊+號,
搜索后添加就可以了
CSRF 保護和驗證
app.config['SECRET_KEY'] = 'mrsoft'- app.config 可用來存儲框架,擴展和程序本身的配置變量。
- SECRET_KEY’,是配置變量通用密鑰。
- mrsoft,是密碼
表單類
使用 Flask?WTF 時,每個Web表單都由一個繼承自Form的類表示。
這個類定義了表單中的一組字段,每個字段都用對象表示。字段對象可附屬一個或多個驗證函數,以驗證用戶提交的輸入值是否符合要求。
例如,使用 Flask?WTF創建包含一個文本字段、密碼字段和一個提交按鈕的簡單的Web表
單,代碼如下:
這個表單中的字段都定義為類變量,類變量的值是對應字段類型的變量。
字段會在渲染成HTML的組件,以下是常用的字段。
WTForms支持的HTML標準字段
| StringField | 文本字段 |
| TextAreaField | 多行文本字段 |
| PasswordField | 密碼文本字段 |
| HiddenField | 隱藏文本字段 |
| DateField | 文本字段,值為datetime.date格式 |
| DateTimeField | 文本字段,值為datetime.datetime格式 |
| IntegerField | 文本字段,值為整數 |
| DecimalField | DecimalField |
| FloatField | 文本字段,值為浮點數 |
| BooleanField | 復選框,值為True和False |
| RadioField | 一組單選框 |
| SelectField | 下拉列表 |
| SelectMultipleField | 下拉列表,可選擇多個值 |
| FileField | 文件上傳字段 |
| SubmitField | 表單提交按鈕 |
WTForms驗證函數
| 驗證電子郵件地址 | |
| EqualTo | 比較兩個字段的值,常用于要求輸入兩次密碼進行確認的情況 |
| IPAddress | 驗證IPv4網絡地址 |
| Length | 驗證輸入字符串的長度 |
| NumberRange | 驗證輸入的值在數字范圍內 |
| Optional | 無輸入值時跳過其他驗證函數 |
| Required | 確保字段中有數據 |
| Regexp | 使用正則表達式驗證輸入值 |
| URL | 驗證URL |
| AnyOf | 確保輸入值在可選值列表中 |
| NoneOf | 確保輸入值不在可選列表中 |
字段的參數
- label:字段別名,在頁面中可以通過字段.label展示;
- validators:驗證規則列表;
- filters:過濾器列表,用于對提交數據進行過濾
- 表示在form類定義時候字段的位置,通常你不需要定義它,默認會按照定義的先后順序排序。
藍圖
在與運行同級的目錄下創建 名為app的文件夾,其中有兩個文件夾一個是home(前臺),另一個是admin(后臺),在兩個文件夾中各創建一個__init__.py初始化文件。
創建藍圖
.在 home/__init__.py文件中創建
from flask import Blueprinthome = Blueprint("home",__name__)@home.route('/')def index():return '<h1>Hello World</h1>'- 藍圖對象 home,可以有自己的路由
- 第一個參數home指定了路由的名稱,第二個參數指定藍圖所在的模塊,上面表示當前文件。
- 同理就能創建 admin的,注意名稱對應
注冊藍圖
from flask import Flask from app.home import home as home_blueprint #home_blueprint 是home 藍圖的別名 from app.admin import admin as admin_blueprintapp = Flask(__name__)app.register_blueprint(home_blueprint,url_prefix = '/home') app.register_blueprint(admin_blueprint,url_prefix = '/admin')if __name__ == '__main__':app.run(debug = True)- 使用register_blueprint()方法來注冊藍圖,第一個參數是藍圖名稱,第二個參數是url_prefix是藍圖的URL前綴。
總結
以上是生活随笔為你收集整理的python前端学习-------Flask框架基础(建议收藏)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python前端开发之准备开发环境(建议
- 下一篇: python前端学习-----Flask