Flask入門(一)
1 安裝虛拟環境Mac,linux
sudo pip install virtualenv
ubuntu系統
sudo apt-get install python-virtualenv
2 安裝flask
1 python3 環境下全局安裝
pip3 install flask
2 虛拟環境下virtualenv下安裝
首先先建立env虛拟環境
mkdir myproject #建立項目目錄
cd myproject
virtualenv venv #安裝虛拟檔案目錄venv
source /venv/bin/activate #啟動新項目
pip3 install flask
注:部分編輯器建立虛拟環境,Python的解釋路徑需要更改.
3 pycharm中運作flask,選擇flask建立project,一定要加載建立的虛拟環境,找到虛拟環境目錄設定python解釋器,設定項目目錄
3 flask初起航
3.1最簡單的flask程式
from flask import Flask #導入類Flask
app = Flask(__name__) #類的執行個體是WSGI應用程式App
# route() 裝飾器把一個函數綁定到對應的 URL 上
@app.route('/')
def hello():
return 'hello python'
#主函數入口
if __name__ == '__main__':
app.run()
注:
(1) __name__就是辨別子產品的名字的一個系統變量。這裡分兩種情況:假如目前子產品是主子產品hello.py
,那麼此子產品名字__name__就是__main__,通過if判斷這樣就可以執行“__mian__:”後面的主函數内容;
假如此子產品是被import導入的,則此子產品名字__name__為檔案名 : hello,
通過if判斷這樣就會跳過“__mian__:”,不執行後面的函數.
(2) 啟動參數:
debug 預設為False True debug=True不能用于生産環境
port 指定端口号 預設5001
host 指定主機名 host='0.0.0.0' 所有公網ip均可通路
threaded 線程 True
(3) 包括 Flask類引入,Flask類執行個體app,綁定路由,定義函數,設定主函數這5個過程.
(4) debug = True 可以進入debug模式,既可以不重新開機服務加載,又可以顯示頁面錯誤資訊.
3.2 配置檔案
1 建立一個config.py檔案
2 在主app檔案中導入這個檔案,并且配置到app中,示例代碼如下
import config
app.config.from_object(config)
3 還有很多其他的參數,都是放在改配置檔案中,如SECRET_KEY等
4 flask參數與變量
4.1 變量
1 變量作為參數傳遞: 文法<variable_name>
#(單個參數)
@app.route('/find_girl/<name>')
#視圖名稱
def findGirl(name):
return 'Hello girl,name is {}'.format(name)
#(多個參數)
@app.route('/find_girl/<name>/<age>')
#視圖名稱
def findGirl(name,age):
return 'Hello girl,name is {},age is {}'.format(name,age)
4.2 參數類型
(1) string 預設就為字元串
(2) int 限制傳遞進來的參數為 int類型 不做類型的轉換
(3) float 限制傳遞進來的參數為 float類型 不做類型的轉換
(4) path 将請求的路由位址後面的所有參數 都認為是一個參數的值 不再做路由的查找
@app.route('/arg_type/<string:arg>') #傳遞進來的資料 都更改為n字元串
@app.route('/arg_type/<int:arg>') #限制傳遞資料類型為int
@app.route('/arg_type/<float:arg>') #限制傳遞資料類型為float
@app.route('/arg_type/<path:arg>/') #将路由位址後面的所有 都認為是參數
5 構造響應與抛出異常
5.1 構造響應
下面我們來講下構造響應:
構造響應通過導入 from flask import make_response
可以使用 render_template() 方法來渲染模闆 404模闆頁面 : error.html
@app.route('/res')
def res():
response = make_response(render_template('error.html'), 404)
return response
浏覽器頁面結果: 響應結果
5.2 抛出異常
需要引入abort from flask import abort 先抛出錯誤狀态碼再捕獲
#抛出500錯誤碼
@app.route('/look_meizi/')
def look_meizi():
abort(500)
#捕獲指定的404狀态碼 支援錯誤頁面的定制
@app.errorhandler(404)
def page_not_found(e):
return '你請求的位址被外星人挾持走了!!!'
#捕獲500伺服器錯誤狀态碼
@app.errorhandler(500)
def server_error(e):
return e
6 重定向與構造URL
6.1 重定向
需要 from flask import redirect
def myRedirect():
#重定向到res綁定的URL
return redirect('/res')
#或者重定向帶參數的URL
return redirect('/find_girl/name')
6.2 構造URL(URL反轉):
- 在頁面重定向中會使用url反轉,url_for(‘hello’)可以找到hello視圖函數對應的路由
- 在模闆中,也會使用url反轉.
如果 Flask 能比對 URL,那麼 Flask 可以生成它們嗎?當然可以
構造URL通過引入 from flask import url_for
@app.route('/redirect/')
def myRedirect():
#url_for 重定向接路由位址,redirect重定向到改位址,是以一般組合用起來很友善
#url_for 構造無參url
# return redirect(url_for('hello'))
#url_for 構造帶參url,這樣不管find_girl的路由怎麼變,都可以重定向至該頁面
return redirect(url_for('find_girl',name='goodsunck'))