编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Python Flask中的CRUD生成利器(python生成器yield原理)

wxchong 2024-07-29 07:54:39 开源技术 11 ℃ 0 评论

引言

在提供丰富的库支持构建REST API方面,Flask生态系统从不缺席。然而,开发过程中往往需重复编写大量的创建(Create)、读取(Read)、更新(Update)、删除(Delete)——简称CRUD——操作的端点。传统方法需要开发者手动实现每个端点,无疑增加了工作量。


Flask-Muck的出现,优雅解决了上述问题。它不仅能够与生产环境中那些必要的非标准端点和谐共处,还在 Flask/SQLAlchemy 技术栈上添加翅膀,以声明性和模块化的方法取代大片的模板代码。

Flask-Muck的魔力

以不到十行的代码,Flask-Muck就能为资源生成一套具备完整特性的标准CRUD操作端点。这样的简约之美,在程序猿的世界里等同于凝聚时间与智慧的艺术作品。以下便是Flask-Muck如何在几行代码内展开画卷的示范:

class MyModelApiView(FlaskMuckApiView):
    api_name = "my-model"
    # Rest of the magic...

利用 Flask-Muck,您的Flask应用能够快速实现包括数据创建、查询、更新等功能的API端点,而无需层层深入底层实现。

起步:搭建Flask应用

构建RESTful API的旅程始于创建最基本的Flask应用。而Flask-Muck使得这一过程极为简单。配置 SQL 和 SQLAlchemy 之后,您可以开始定义数据库模型。例如,一个待办事项的模型可能如下所示:

class TodoModel(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String, nullable=False)

数据模型与架构

在Flask项目中,模型定义了数据库中的表结构。而架构(Schema)则是Marshmallow提供的一种定义请求和响应数据结构的方法。这两者共同作用下,配合Flask-Muck,可以显著提高开发效率,缩短从搭建到上线的周期。
视图与蓝图
Flask中的视图负责处理HTTP请求。而蓝图(Blueprint)可以看作是组织视图的容器。在Flask-Muck中,你可以使用蓝图来组织和注册视图逻辑,如下所示:

api_blueprint = Blueprint("v1_api", __name__, url_prefix="/api/v1/")
class TodoApiView(FlaskMuckApiView):
    # Rest of the logic...

通过继承 FlaskMuckApiView 并注册到蓝图,一个功能齐全的CRUD API便闪电般完成了。

最后一步:启动服务

最后,仅通过简单的命令就可以让你的Flask应用跑起来:

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

你的API搭建好了,接下来通过Curl命令或者Postman等工具与之交互,验证它的功能。你可以尝试创建一个待办事项,列出所有现有的待办事项,甚至更新和删除它们。

结论

Flask-Muck作为一个crud框架,赋予了开发者迅速搭建CRUD API的能力,它勾勒了一个干净、高效的编程体验。你现在可以访问其GitHub仓库,浏览文档,查看示例,甚至探索嵌套资源、细化端点等更高级的功能。
如果这篇文章对你的Flask之旅有所帮助,请不吝点赞收藏,将 Flask-Muck 添加至你的工具箱,让编码再次成为一种享受与创造。
祝你在构建RESTful API的道路上一切顺利。如果您对我的文章感兴趣不妨了解下我的技术专栏,里面包含了非常多 python 实用技巧。

一个完整的 todo app代码示例:

import marshmallow as ma
from flask import Flask, Blueprint
from flask_muck import FlaskMuckApiView
from flask_sqlalchemy import SQLAlchemy
from marshmallow import fields as mf
from sqlalchemy.orm import DeclarativeBase

app = Flask(__name__)


class Base(DeclarativeBase):
    pass


db = SQLAlchemy(model_class=Base)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///todo_example.db"
db.init_app(app)


class TodoModel(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    text = db.Column(db.String, nullable=False)


class TodoSchema(ma.Schema):
    id = mf.Integer(required=True, dump_only=True)
    text = mf.String(required=True)


api_blueprint = Blueprint("v1_api", __name__, url_prefix="/api/v1/")


class TodoApiView(FlaskMuckApiView):
    session = db.session
    api_name = "todos"
    Model = TodoModel
    ResponseSchema = TodoSchema
    CreateSchema = TodoSchema
    PatchSchema = TodoSchema
    UpdateSchema = TodoSchema
    searchable_columns = [TodoModel.text]


TodoApiView.add_rules_to_blueprint(api_blueprint)
app.register_blueprint(api_blueprint)


if __name__ == "__main__":
    with app.app_context():
        db.create_all()
    app.run(debug=True)

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表