python之Flask框架API开发入门

目录

      • 安装 Flask
      • 创建一个 Flask 应用
      • 定义路由
      • 运行 Flask 应用
      • 在应用中添加更多的路由和视图函数
      • 向路由传递参数
      • 使用 Flask 开发 API
        • Flask接收GET请求参数
        • Flask接收POST请求
        • Flask接收JSON格式的请求参数
        • 接收GET和POST请求
        • 参数默认值
        • request.json和request.get_json()区别
      • 修改默认启动端口
      • 开启调试模式
      • 所有IP可见

Flask是一个基于Python编写的轻量级Web框架,旨在提供简单、易用的工具来构建Web应用程序。Flask是一个微型框架,它只包含最基本的功能,这使得它易于使用和学习。

python之Flask框架API开发入门

Flask的主要特点包括:

  • 简单易学:Flask的API简单易学,使得开发人员能够快速创建Web应用程序。
  • 轻量级:Flask非常轻量级,没有多余的组件和依赖关系。
  • 灵活:Flask可以根据需要进行扩展,开发人员可以选择自己需要的扩展。
  • 可定制:Flask允许开发人员完全自定义应用程序的行为和外观。
  • Jinja2模板:Flask使用Jinja2模板引擎来生成HTML页面。

Flask的文档非常丰富,提供了广泛的指南和教程,以及强大的扩展支持。Flask是一个流行的Web框架,广泛应用于Web开发、API开发和数据可视化等领域。

安装 Flask

可以使用 pip 工具来安装 Flask:

pip install Flask

创建一个 Flask 应用

创建一个 Python 文件,并导入 Flask 模块:

from flask import Flask

app = Flask(__name__)

在上面的代码中,我们创建了一个 Flask 应用,并将其存储在名为 app 的变量中。

定义路由

在 Flask 中,可以使用 @app.route() 装饰器来定义 URL 路由,让应用响应特定的 URL 请求。例如:

@app.route('/')
def hello():
    return 'Hello, World!'

上面的代码定义了一个根路由 /,当用户访问该路由时,将调用 hello() 函数,该函数返回一个字符串 ‘Hello, World!’。

运行 Flask 应用

在 Flask 应用中,可以使用 app.run() 方法来启动应用程序。例如:

if __name__ == '__main__':
    app.run()

上面的代码判断当前文件是否作为入口程序运行,如果是,就启动 Flask 应用。启动后,应用将监听本地的默认端口(5000),并在浏览器中显示 Hello, World!。

在应用中添加更多的路由和视图函数

可以使用 @app.route() 装饰器来添加更多的路由和视图函数。例如:

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'

上面的代码定义了两个路由:/ 和 /hello,当用户访问这些路由时,分别调用 index() 和 hello() 函数,返回相应的字符串。

向路由传递参数

可以使用的语法来在路由中传递参数。例如:

@app.route('/user/')
def show_user_profile(username):
    return f'User {username}'

@app.route('/post/')
def show_post(post_id):
    return f'Post {post_id}'

上面的代码定义了两个路由:/user//post/,其中 是路由参数。当用户访问这些路由时,参数将传递给相应的视图函数,可以在函数中使用。

使用 Flask 开发 API

下面是一个简单的示例,它使用 Flask 开发一个返回当前时间的 API:

from flask import Flask, jsonify
from datetime import datetime

app = Flask(__name__)

@app.route('/time')
def get_time():
    now = datetime.now()
    return jsonify({'time': now.strftime('%Y-%m-%d %H:%M:%S')})

if __name__ == '__main__':
    app.run(debug=True)

在这个示例中,我们创建了一个 Flask 应用对象 app,定义了一个路由 /time,在这个路由下定义了一个视图函数 get_time(),它返回一个 JSON 格式的响应,其中包含当前的时间。最后,我们使用 app.run() 启动了应用。

这个示例中,我们使用了 Flask 的 jsonify 函数将字典对象转换为 JSON 格式的响应。这个函数自动将响应的 MIME 类型设置为 application/json,并使用 Flask 的内置 JSON 编码器将字典对象转换为 JSON 格式。

可以使用 Postman 或其他工具来测试这个 API,例如发送 GET 请求到 http://127.0.0.1:5000/time,将会得到类似于以下的响应:

{
  "time": "2023-02-17 11:23:42"
}

在实际应用中,可以根据需要添加身份认证、访问控制、异常处理、日志记录等功能。Flask 有大量的扩展库可以帮助实现这些功能。例如,Flask-RESTful 可以简化 RESTful API 的开发,Flask-Security 可以提供基本的身份认证和访问控制功能。

Flask接收GET请求参数

假设我们有一个 URL 是 http://example.com/user?name=John&age=25,其中有两个查询参数 nameage,分别表示用户的姓名和年龄。我们可以使用如下代码来接收这两个查询参数的值,并返回 JSON 格式的响应数据:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/user')
def get_user():
    name = request.args.get('name')
    age = request.args.get('age')
    response_data = {'name': name, 'age': age}
    return jsonify(response_data)

if __name__ == '__main__':
    app.run()

Flask接收POST请求

假设我们的客户端使用 HTTP POST 方法向 URL http://example.com/user 发送一个包含 name 和 age 参数的请求。我们可以使用如下代码来接收这两个参数的值,并返回 JSON 格式的响应数据:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/user', methods=['POST'])
def create_user():
    name = request.form.get('name')
    age = request.form.get('age')
    response_data = {'name': name, 'age': age}
    return jsonify(response_data)

if __name__ == '__main__':
    app.run()

Flask接收JSON格式的请求参数

假设我们的客户端使用 HTTP POST 方法向 URL http://example.com/user 发送一个包含 name 和 age 参数的 JSON 格式的请求。我们可以使用如下代码来接收这两个参数的值,并返回 JSON 格式的响应数据:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/user', methods=['POST'])
def create_user():
    request_data = request.get_json()
    name = request_data.get('name')
    age = request_data.get('age')
    response_data = {'name': name, 'age': age}
    return jsonify(response_data)

if __name__ == '__main__':
    app.run()

接收GET和POST请求
from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'GET':
        name = request.args.get('name')
        age = request.args.get('age')
        data = {'name': name, 'age': age}
        return jsonify(data)
    elif request.method == 'POST':
        name = request.json.get('name')
        age = request.json.get('age')
        data = {'name': name, 'age': age}
        return jsonify(data)

if __name__ == '__main__':
    app.run(debug=True)

参数默认值
#GET 参数的默认值设置
name = request.args.get('name', 'world')

#POST 参数的默认值设置
name = request.form.get('name', 'world')

JSON 参数的默认值设置
data = request.get_json(default={})
name = data.get('name', '张三')
request.json和request.get_json()区别

在 Flask 中request.jsonrequest.get_json() 都是用来获取请求体中的 JSON 数据的方法,二者的区别在于获取方式不同。

request.json 是通过访问 request.data 属性来获取请求体数据,然后将其解析为 JSON 格式,返回一个 Python 字典。该方法只适用于请求头中的 Content-Type 是 application/json 的情况,如果请求头中的 Content-Type 是其他类型,该方法将会返回 None。

request.get_json() 方法是一个更为灵活的方法,它可以同时支持多种 Content-Type 类型,例如 application/jsonapplication/vnd.api+json 等等。该方法会根据请求头中的 Content-Type 来判断请求体的类型,然后将其解析为 JSON 格式,并返回一个 Python 字典。如果请求头中的 Content-Type 不是 JSON 类型,该方法将会返回 None。

另外,如果请求体中的 JSON 数据不合法,两个方法都会抛出异常。具体来说,如果请求体无法被解析为 JSON 格式,两个方法都会抛出 BadRequest 异常;如果请求头中的 Content-Type 不是 application/jsonrequest.get_json() 方法会抛出 UnsupportedMediaType 异常。

总的来说,如果你确定请求头中的 Content-Type 是 application/json,可以直接使用 request.json 方法;如果需要支持多种 Content-Type,可以使用 request.get_json() 方法。不过,无论使用哪种方法,都需要对请求体中的 JSON 数据进行合法性检查,以确保程序的稳定性和安全性。

修改默认启动端口

Flask 默认监听的端口是 5000。如果要修改监听的端口,可以在调用 Flask 的 run 方法时传递一个 port 参数:

from flask import Flask

app = Flask(__name__)

if __name__ == '__main__':
    app.run(port=8000)

这个例子中,我们将 Flask 监听的端口改为 8000。

开启调试模式

如果要开启调试模式,可以在调用 Flask 的 run 方法时传递一个 debug 参数,并将它设置为 True:

from flask import Flask

app = Flask(__name__)

if __name__ == '__main__':
    app.run(debug=True)

开启调试模式后,Flask 会输出调试信息,并在代码发生异常时显示调试界面,方便开发和调试。需要注意的是,调试模式不应该在生产环境中使用,因为它会暴露应用程序的内部信息,可能导致安全问题。

所有IP可见

默认情况下,Flask 应用程序只绑定到本地回环接口(localhost,127.0.0.1)上,这意味着只能从本地访问应用程序。要使应用程序对任何IP地址都可见,可以通过将host参数设置为0.0.0.0来实现,如下所示:

from flask import Flask

app = Flask(__name__)

if __name__ == '__main__':
    app.run(host='0.0.0.0')

版权声明:如无特殊标注,文章均来自网络,本站编辑整理,转载时请以链接形式注明文章出处,请自行分辨。

本文链接:https://www.shbk5.com/dnsj/73345.html