本文首發(fā)于我的個人博客 Sui Xin’s Blog
原文:https://suixinblog.cn/2019/09/flask.html
作者:Sui Xin
Flask 是一個簡單的 Python web 框架洛波,使用它只用幾行代碼就可以實現(xiàn)一個小型 Python web 服務绳军。
最近模型與前端整合的時候剛好用到,遂記錄一下它的用法礼预。
一個簡單的小例子
from flask import Flask
app = Flask(__name__)
@app.route("/")
def welcome():
return "Hello World!"
if __name__ == "__main__":
app.run()
運行之后訪問 5000
端口即可看到結(jié)果墨闲。
Flask hello world
基本參數(shù)設置
設置 URL 及請求方式
Flask.route(rule, methods=["GET"])
-
rule
:指定的 URL。 -
methods
:允許的請求方式,默認只響應GET
請求曹质。
解析 GET 請求參數(shù)
解析 GET 參數(shù)有兩種方式,第二種較為靈活,更推薦第二種使用方式羽德。
第一種:變量轉(zhuǎn)換
@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)
目前支持的轉(zhuǎn)換類型有 string
几莽,int
與 float
等。使用局限性較大宅静。
第二種:從 URL 中解析
from flask import Flask, request
app = Flask(__name__)
@app.route("/search")
def compute():
# 假設發(fā)送的請求鏈接為 http://localhost:5000/search?a=2&b=3
# 可通過 request 來得到參數(shù)
a = request.args.get("a")
b = request.args.get("b")
res = int(a) + int(b)
return res
解析 POST 請求參數(shù)
from flask import Flask, request, jsonify
app = Falsk(__name__)
@app.route("/compute", methods=["POST"])
def compute():
# 這里客戶端發(fā)送的請求數(shù)據(jù)類似于 {"number": 2}
json_data = request.json
number = json_data["number"]
result = number ** 2
return jsonify(res=result)
返回 json 數(shù)據(jù)
除了直接使用 Python 內(nèi)置的 dict 構(gòu)建 json 格式數(shù)據(jù)返回之外章蚣,還可以使用 flask.jsonify
返回 json 類數(shù)據(jù)。
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})
配置鏈接與端口
app.run(host="localhost", port=5000, debug=True)
host
設置為 0.0.0.0
可使用外網(wǎng)訪問姨夹。
當然纤垂,Flask
可以實現(xiàn)標準的 RESTful API,也能實現(xiàn)更復雜的功能磷账,如捕獲異常等峭沦,甚至可以真正的與數(shù)據(jù)庫打通構(gòu)建更復雜的功能,但這已超出了本文的范圍逃糟,有需要請移步 Flask User’s Guide吼鱼。