天天看點

Python 開發簡單的 web API

本文首發于我的個人部落格 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

端口即可看到結果。

Python 開發簡單的 web API

基本參數設定

設定 URL 及請求方式

Flask.route(rule, methods=["GET"])

  • rule

    :指定的 URL。
  • 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。