Flask之前后端分离restful api学习笔记(一)——Redprint

该项目参考https://coding.imooc.com/class/220.html,深入理解Flask前后端分离场景,在Flask框架基础上进行了一定的扩展来满足需求。

具体源码:https://github.com/LMFrank/Flask_api

Redpoint#

Blueprint(蓝图)的缺点:

  • Blueprint本身不是用来拆分视图函数的,应该是用来模块级别的拆分

  • 写路由时可能过于繁琐(v1/book/getv1/book/delete

    当然,上述并不满足restful风格,但是依然可以看出类似url_prefix的字符在重复写入,且代码逻辑架构不够清晰

    因此,我们尝试引入Redpoint实现视图函数的拆分

架构图:

项目框架:

实现方式:

redprint.py

实现方式参考了blueprint,包括route装饰器,以及注册函数register。与blueprint不同的是,通过self.mound来储存对应参数,到register中解包,这样便可以将对应参数传给bp,并调用add_url_rule方法

Copy
# -*- coding: utf-8 -*- class Redprint(object): def __init__(self, name): self.name = name self.mound = [] def route(self, rule, **options): def decorator(f): self.mound.append((f, rule, options)) return f return decorator def register(self, bp, url_prefix=None): if url_prefix is None: url_prefix = '/' + self.name for f, rule, options in self.mound: endpoint = options.pop("endpoints", f.__name__) bp.add_url_rule(url_prefix + rule, endpoint, f, **options)

调用redprint:

app/api/v1/__init__.py

Copy
# -*- coding: utf-8 -*- from flask import Blueprint from app.api.v1 import user, book def create_bluprint_v1(): bp_v1 = Blueprint('v1', __name__) user.api.register(bp_v1) book.api.register(bp_v1) return bp_v1

调用blueprint:

app/app.py

Copy
# -*- coding: utf-8 -*- from flask import Flask def register_blueprints(app): from app.api.v1 import create_bluprint_v1 app.register_blueprint(create_bluprint_v1(), url_prefix='/v1') def create_app(): app = Flask(__name__) app.config.from_object('app.config.settings') app.config.from_object('app.config.secure') register_blueprints(app) return app
posted @   LMFrank  阅读(585)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
CONTENTS