本文首發于我的個人部落格 Sui Xin’s Blog
原文:https://suixinblog.cn/2019/09/flask.html
作者:Sui Xin
Flask 是一個簡單的 Python web 架構,使用它隻用幾行代碼就可以實作一個小型 Python web 服務。
最近模型與前端整合的時候剛好用到,遂記錄一下它的用法。
一個簡單的小例子
from flask import Flask
app = Flask(__name__)
@app.route("/")
def welcome():
return "Hello World!"
if __name__ == "__main__":
app.run()
運作之後通路
5000
端口即可看到結果。
基本參數設定
設定 URL 及請求方式
Flask.route(rule, methods=["GET"])
-
:指定的 URL。rule
-
:允許的請求方式,預設隻響應methods
請求。GET
解析 GET 請求參數
解析 GET 參數有兩種方式,第二種較為靈活,更推薦第二種使用方式。
第一種:變量轉換
@app.route("/user/<string:user_name>")
def welcome(user_name):
return "Hello {}".format(user_name)
@app.route("/user/<int:id>")
def welcome(id):
return "Here is No.{}".format(id)
目前支援的轉換類型有
string
,
int
與
float
等。使用局限性較大。
第二種:從 URL 中解析
from flask import Flask, request
app = Flask(__name__)
@app.route("/search")
def compute():
# 假設發送的請求連結為 http://localhost:5000/search?a=2&b=3
# 可通過 request 來得到參數
a = request.args.get("a")
b = request.args.get("b")
res = int(a) + int(b)
return res
解析 POST 請求參數
from flask import Flask, request, jsonify
app = Falsk(__name__)
@app.route("/compute", methods=["POST"])
def compute():
# 這裡用戶端發送的請求資料類似于 {"number": 2}
json_data = request.json
number = json_data["number"]
result = number ** 2
return jsonify(res=result)
傳回 json 資料
除了直接使用 Python 内置的 dict 建構 json 格式資料傳回之外,還可以使用
flask.jsonify
傳回 json 類資料。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/search")
def compute():
a = request.args.get("a")
b = request.args.get("b")
res = int(a) + int(b)
return jsonify(a=a, b=b, res=res)
# 或者
# return jsonify({"a": a, "b": b, "res": res})
配置連結與端口
host
設定為
0.0.0.0
可使用外網通路。
當然,
Flask
可以實作标準的 RESTful API,也能實作更複雜的功能,如捕獲異常等,甚至可以真正的與資料庫打通建構更複雜的功能,但這已超出了本文的範圍,有需要請移步 Flask User’s Guide。