Flask的路由,視圖和相關配置


第一個flask程序

from flask import Flask 

Flask函數接收一個參數__name__,它會指向程序所在的包

app = Flask(__name__)
  • 裝飾器的作用是將路由映射到視圖函數 index,在程序運行過程中,程序實例中會使用 url_map 將裝飾器路由和視圖的對應關系保存起來
@app.route('/') def index(): return 'Hello World' 
  • Flask應用程序實例的 run 方法 啟動 WEB 服務器
if __name__ == '__main__': app.run()

相關配置參數

初始化參數

Flask 程序實例在創建的時候,需要默認傳入當前 Flask 程序所指定的包(模塊),接下來就來詳細查看一下 Flask 應用程序在創建的時候一些需要我們關注的參數:

  • import_name
    • Flask程序所在的包(模塊),傳 __name__ 就可以
    • 其可以決定 Flask 在訪問靜態文件時查找的路徑
  • static_path
    • 靜態文件訪問路徑(不推薦使用,使用 static_url_path 代替)
  • static_url_path
    • 靜態文件訪問路徑,可以不傳,默認為:/ + static_folder
  • static_folder
    • 靜態文件存儲的文件夾,可以不傳,默認為 static
  • template_folder
    • 模板文件存儲的文件夾,可以不傳,默認為 templates

程序加載配置

在 Flask 程序運行的時候,可以給 Flask 設置相關配置,比如:配置 Debug 模式,配置數據庫連接地址等等,設置 Flask 配置有以下三種方式:

  • 從配置對象中加載(常用)
    • app.config.form_object()
  • 從配置文件中加載
    • app.config.form_pyfile()
  • 從環境變量中加載(了解)
    • app.config.from_envvar()

以下演練以設置應用程序的 DEBUG(調試模式) 為例,設置應用為調式模式這后,可以實現以下功能:

  1. 程序代碼修改后可以自動重啟服務器
  2. 在服務器出現相關錯誤的時候可以直接將錯誤信息進行拋出到控制台打印

 

使用方式

配置對象

  • 從配置對象中加載,創建配置的類,代碼如下:
# 配置對象,里面定義需要給 APP 添加的一系列配置 class Config(object): DEBUG = True # 創建 Flask 類的對象,指向程序所在的包的名稱 app = Flask(__name__) # 從配置對象中加載配置 app.config.from_object(Config) 

運行測試,在修改代碼之后直接保存,會自動重啟服務器

配置文件

  • 創建配置文件 config.ini,在配置文件中添加配置
  • 使用代碼去加載配置
  • # 創建 Flask 類的對象,指向程序所在的包的名稱 app = Flask(__name__) # 從配置文件中加載配置 app.config.from_pyfile('config.ini')

環境變量(了解)

在Edit Configrations配置相關的參數

  • 使用代碼去加載配置
# 創建 Flask 類的對象,指向程序所在的包的名稱 app = Flask(__name__) # 加載指定環境變量名稱所對應的相關配置 app.config.from_envvar('FLASKCONFIG') 

讀取配置

  • app.config.get()
  • 在視圖函數中使用 current_app.config.get()

注:Flask 應用程序將一些常用的配置設置成了應用程序對象的屬性,也可以通過屬性直接設置/獲取某些配置:app.debug = True

app.run的參數

  • 可以指定運行的主機IP地址,端口,是否開啟調試模式

app.run(host="0.0.0.0", port=5000, debug = True)


指定路由地址

# 指定訪問路徑為 demo1 @app.route('/demo1') def demo1(): return 'demo1' 

給路由傳參示例

有時我們需要將同一類 URL 映射到同一個視圖函數處理,比如:使用同一個視圖函數來顯示不同用戶的個人信息。

# 路由傳遞參數 @app.route('/user/<user_id>') def user_info(user_id): return 'hello %s' % user_id 
  • 路由傳遞的參數默認當做 string 處理,也可以指定參數的類型
# 路由傳遞參數 @app.route('/user/<int:user_id>') def user_info(user_id): return 'hello %d' % user_id 

這里指定int,尖括號中的內容是動態的,在此暫時可以理解為接受 int 類型的值,實際上 int 代表使用 IntegerConverter 去處理 url 傳入的參數

指定請求方式

在 Flask 中,定義一個路由,默認的請求方式為:

  • GET
  • OPTIONS(自帶)
  • HEAD(自帶)

如果想添加請求方試,那么可以如下指定:

@app.route('/demo2', methods=['GET', 'POST']) def demo2(): # 直接從請求中取到請求方式並返回 return request.method

Postman的使用:略.

視圖常用邏輯

  • 返回 JSON
  • 重定向
    • url_for
  • 自定義狀態碼

返回JSON

在使用 Flask 寫一個接口時候需要給客戶端返回 JSON 數據,在 Flask 中可以直接使用 jsonify 生成一個 JSON 的響應

# 返回JSON @app.route('/demo4') def demo4(): json_dict = { "user_id": 10, "user_name": "laowang" } return jsonify(json_dict) 

不推薦使用 json.dumps 轉成 JSON 字符串直接返回,因為返回的數據要符合 HTTP 協議規范,如果是 JSON 需要指定 content-type:application/json

重定向

  • 重定向到 百度官網
# 重定向 @app.route('/demo5') def demo5(): return redirect('http://www.baidu.com') 
  • 重定向到自己寫的視圖函數
    • 可以直接填寫自己 url 路徑
    • 也可以使用 url_for 生成指定視圖函數所對應的 url

@app.route('/demo1') def demo1(): return 'demo1' # 重定向 @app.route('/demo5') def demo5(): return redirect(url_for('demo1')) 
  • 重定向到帶有參數的視圖函數
    • 在 url_for 函數中傳入參數
# 路由傳遞參數 @app.route('/user/<int:user_id>') def user_info(user_id): return 'hello %d' % user_id # 重定向 @app.route('/demo5') def demo5(): # 使用 url_for 生成指定視圖函數所對應的 url,注意url_for括號內要是字符串. return redirect(url_for('user_info', user_id=100)) 

自定義狀態碼

  • 在 Flask 中,可以很方便的返回自定義狀態碼,以實現不符合 http 協議的狀態碼,例如:status code: 666
@app.route('/demo6') def demo6(): return '狀態碼為 666', 666
 
 



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com