- 使用的flask版本爲0.10.1
- 建立一個最簡單的flask程序:
from flask import Flask
app = Flask(__name__)
print('run')
@app.route('/')
def index():
return 'hello flask'
if __name__ == '__main__':
app.run()
- Flask函數接收一個參數__name__,它會指向程序所在的路徑
- 裝飾器的做用是將路由映射到視圖函數 index
- run 方法 啓動 WEB 服務器
- 配置初始參數
- flask實例建立時還可傳入:
- static_path 靜態文件訪問路徑(不推薦使用,可以使用 static_url_path 代替)
- static_url_path 靜態文件訪問路徑,默認爲/static
- static_folder 靜態文件存儲的文件夾,默認爲 static
- template_folder 模板文件存儲的文件夾,默認爲 templates
- 程序加載配置
- 程序加載運行時的配置,能夠配的有debug,數據庫連接等,有三種配置方式:
- 從配置對象中加載:
- app.config.from_object() 該方式須要先寫一個配置類,類中寫入相關配置,並將該類傳入
- 從配置文件中加載
- app.config.from_pyfile() 該方式須要先寫一個配置文件,文件寫入相關配置,並將該文件名(路徑)傳入
- 從環境變量中加載
- app.config.from_envvar() 不推薦
- RUN方法的參數:
- .run(host="0.0.0.0", port=5000, debug = True) 能夠指定運行主機的ip,端口以及debug開關
- 動態路由及傳參:
- @app.route('/') 這種直接指定路徑的爲靜態路由
- 動態傳參,能夠獲取到指定url後面攜帶的信息,並可做爲參數進行傳遞:
@app.route('/user/<user_id>')
def user_info(user_id):
return 'hello %s' % user_id
- 傳遞的參數還能夠指定數據類型,如把
改成
,也能夠本身定義轉換器,來實現參數的控制
- 指定請求方式:
- @app.route('/',methods=['post']) 不指定時默認爲get
- 獲取請求參數,獲取時需先導入 from flask import request
- get: request.args.get()
- post: request.form.get()
- 上傳文件:request.files.get(),獲取到文件後使用.save(路徑)保存
- 返回json
- 導入jsonify,能夠直接使用jsonify(字典)
- 重定向
- 導入redirect,視圖函數直接return redirect('要重定向的網址')
- 導入url_for,使用return redirect(url_for('函數名'))反向解析進行重定向,若是函數有參數,直在url_for('函數名',參數=‘xxx’)
- 自定義狀態碼
- return 要返回的數據,'狀態碼 說明內容' return 'test code','789 err'
- 請求鉤子,經過裝飾器形式實現
- 在處理第一個請求前執行:before_first_request,使用時直接@app.before_first_request
- 在每次請求前執行:before_request 使用同上
- 在每次請求後執行:after_request 使用同上
- 每次請求結束以後執行: teardown_request 使用同上
- 狀態保持
- cookie 在客戶端存儲信息使用Cookie
- 設置時導入from flask imoprt Flask,make_response
- 設置:
response = make_response('cookies set success')
response.set_cookie('user_name','jams',max_age=3600) 以鍵值對的形式設置,max_age設置有效時長
- 獲取時使用request
re_cookie = request.cookies.get('user_name')
- session 在服務器端存儲信息使用Session Session依賴於Cookie
- 設置時導入from flask import Flask,session
session['se_name'] = 'Liming'
- 獲取時直接使用session.get('se_name')
- 設置session時必須先設置secret_key:app.secret_key = 'hjhjhsakjgyhweqoaa'