天天看点

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。