对Flask RESTX与Flask的个人理解

本文介绍了如何使用Flask轻量级框架结合Flask-RESTX扩展创建RESTfulAPI,包括Flask基础框架、安装步骤、基于Blueprint的模块化设计以及Flask-RESTX的使用方法和实例,旨在提升开发效率和代码组织性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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程序更加易于维护。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值