对Flask RESTX与Flask的个人理解

Application developement with Flask and Flask-RESTX



1. Flask的简介及其安装

Flask是一个使用Python编写的轻量级Web应用程序框架,结构简单,几乎所有功能都采用第三方扩展实现,易于初级开发者学习使用。

本文将在flask框架的基础上引入Blueprint,并使用 Flask-RESTX 扩展实现 RESTful API,使 Flask 应用更加模块化,代码更加清晰,同时也可以快速地构建 REST APIs,提高开发效率。

安装教程:

  • 使用Conda安装 Flask:
    conda install flask
  • 使用pip安装 Flask:
    pip install flask
  • 使用pip安装 Flask-RESTX:
    pip install flask-restx

2. Flask的基本框架

这是一个flask应用的基本框架。
可以使用命令python run.py 启动。

/myflaskapp
    /app
        __init__.py
        routes.py
        /templates
            index.html
        /static
            style.css
    run.py
  • 首先是run.py文件,这是Flask应用的入口文件,它定义了应用的名称,加载了路由和模板,然后启动了应用。
from app import app

if __name__ == '__main__':
    app.run(debug=True, 
    host='0.0.0.0', 
    port=5000
    )

debug=True:开启调试模式,可以使用命令启动应用,然后在浏览器中打开localhost:5000,就可以对主页内容进行调试。

若源码有变化则自动重启程序,便于调试。

  • /app/__init__.py:这个文件初始化了一个Flask应用实例并引入其它扩展。
from flask import Flask

app = Flask(__name__)

from app import routes

Flask默认使用static目录存放静态资源,templates目录存放模板,存放位置是可以在创建实例时修改的,例如:

app = Flask("my-app", static_folder="path1",template_folder="path2")

  • /app/routes.py:这个文件定义了所有的路由/视图函数。
from flask import render_template
from app import app

@app.route('/')
def index():
    return render_template('index.html')
  • /app/templates/index.html:这是用到的html主页模板。
  • /app/static/style.css:这是 CSS 文件,它为主页提供样式。

02 基于Flask-RESTX构建的RESTful API 与Blueprint的优化

1. Flask-RESTX简介

Flask-RESTX 是 Flask 的扩展,增加了对快速构建 REST API 的支持。 Flask-RESTX 鼓励以最少的设置实现最佳实践。 如果您熟悉 Flask,Flask-RESTX 应该很容易上手。 它提供了一组连贯的装饰器和工具来描述您的 API 并正确公开其文档(使用 Swagger)

2.RESTX-API

REST API 是一种符合 REST 的设计原则或具象状态传输 架构风格的 API。 出于这一原因,REST API 有时也称为 RESTful API。
REST API 通过 HTTP 请求进行通信.例如,REST API 可使用 GET 请求检索记录、使用 POST 请求创建记录、使用 PUT 请求更新记录,以及使用 DELETE 请求删除记录。 可以在 API 调用中使用所有 HTTP 方法。

JSON,全称为JavaScript对象表示法(JavaScript Object Notation),JSON格式的信息常被用于与REST API的交互。

如果您安装了 Requests 库,则可以用于向REST API发送原生的HTTP/1.1请求。以requests.post()为例,

response = requests.post(url, data={key: value}, json={key: value}, **kwargs)
### url为REST API的URL

print(response.json())
### json()函数是Python的requests库中的一个方法,用于将服务器返回的JSON格式的响应内容转换为Python对象

实现了与REST API的交互,将数据传输给REST API,并接收了RESTX-API返回的数据。

3. 小型的Flask-RESTX应用示例

from flask import Flask
from flask_restx import Resource, Api

app = Flask(__name__)
api = Api(app)

@api.route('/hello')
class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

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

将其另存为 api.py 并使用 Python 解释器运行它
请添加图片描述

4. Flask-RESTX定义各类HTTP 方法

Flask-RESTX 提供的主要构建块是resources. Resources建立在 Flask可插拔视图之上,只需在Resources上定义方法,即可轻松访问多个 HTTP 方法。

from flask import Flask, request
from flask_restx import Api, Resource

app = Flask(__name__)
api = Api(app)

# 创建一个RESTX API
@api.route('/api/person')
class Person(Resource):
    def get(self):
        # 在这里实现你的GET逻辑
        return {"message": "GET method called"}

    def post(self):
        # 在这里实现你的POST逻辑
        data = request.get_json()
        return {"message": "POST method called", "data": data}, 201

    def put(self):
        # 在这里实现你的PUT逻辑
        data = request.get_json()
        return {"message": "PUT method called", "data": data}, 200

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

4. 使用蓝图(Blueprint)模块化应用

Flask 使用蓝图(Blueprint)的概念来制作应用程序组件和 支持应用程序内或跨应用程序的通用模式。 蓝图可以大大简化大型应用程序的工作方式,并提供 Flask 扩展在应用程序上注册操作的中心方式。

笔者推荐使用 Flask中的 Blueprint 模块来构建 REST API,并在上面定义RESTX API的路由和视图函数。Blueprints 可以在不修改任何其他代码的情况下,将 REST API 注册到任何 Flask 应用程序中。

以下为实例代码:

from flask import Flask, Blueprint
from flask_restx import Api, Resource

app = Flask(__name__)

# 创建一个名为'api'的Blueprint对象
api_bp = Blueprint('api', __name__)
api = Api(api_bp)

# 在Blueprint对象上定义RESTX API的路由和视图函数
@api.route('/person')
class Person(Resource):
    def get(self):
        return {"message": "GET method called"}

    def post(self):
        return {"message": "POST method called"}, 201
    # ..........

# 将Blueprint对象注册到Flask应用上
app.register_blueprint(api_bp, url_prefix='/api')

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

这样可以通过 http://localhost:5000/api/person来访问这个API,使整个Flask程序更加易于维护。

  • 42
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Flask-RestX 是一个基于 Flask 的扩展,用于快速构建和设计 RESTful API。它是 Flask-Restful 的升级版本,提供了更多的功能和特性来简化 API 的开发和维护。Flask-RestX 提供了一组强大的工具和库,使得创建 API 变得更简单、更整洁。 Flask-RestX 具有以下特点: 1. 自动文档化:Flask-RestX 可以自动生成 API 的文档,包括请求方式、参数、返回值以及错误信息等。只需简单地编写注释,就能自动生成文档,省去了繁琐的手动编写文档的过程。 2. 请求参数解析:Flask-RestX 提供了方便的参数解析功能,可以轻松地解析请求参数。可以通过定义参数类型、限制条件等来验证和过滤参数,确保输入的有效性和安全性。 3. 视图集和资源操作:Flask-RestX 通过视图集(api.add_resource())和资源操作(@api.route())的方式,将相关的 API 代码组织在一起,更加清晰和易于维护。同时,还可以通过继承基类来定义通用的资源操作,提高重用性和开发效率。 4. 响应序列化:Flask-RestX 提供了响应序列化的功能,可以将数据对象自动转换成指定的格式(如 JSON),简化了数据的传输和解析过程。 5. 错误处理:Flask-RestX 集成了错误处理机制,可以针对不同的错误类型返回相应的错误信息。此外,还可以捕获并处理全局和特定资源的异常,保证 API 的可靠性和稳定性。 6. 扩展性:Flask-RestX 支持自定义扩展,可以根据具体需求添加新的功能和特性。同时,还可以结合其他 Flask 扩展(如 Flask-Login、Flask-Cache、Flask-Login 等)来增强 API 的功能和性能。 总的来说,Flask-RestX 是一个强大且易用的 RESTful API 扩展,它可以帮助开发者快速构建和设计高效的 API,并且提供了丰富的功能和工具来简化开发过程。无论是小型项目还是大型应用,都可以使用 Flask-RestX 来提高开发效率和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值