Flask之前后端分离restful api学习笔记(一)——Redprint
该项目参考https://coding.imooc.com/class/220.html,深入理解Flask前后端分离场景,在Flask框架基础上进行了一定的扩展来满足需求。
具体源码:https://github.com/LMFrank/Flask_api
Redpoint#
Blueprint(蓝图)的缺点:
-
Blueprint本身不是用来拆分视图函数的,应该是用来模块级别的拆分
-
写路由时可能过于繁琐(
v1/book/get
和v1/book/delete
)当然,上述并不满足restful风格,但是依然可以看出类似
url_prefix
的字符在重复写入,且代码逻辑架构不够清晰因此,我们尝试引入Redpoint实现视图函数的拆分
架构图:
项目框架:
实现方式:
redprint.py
实现方式参考了blueprint
,包括route
装饰器,以及注册函数register
。与blueprint
不同的是,通过self.mound
来储存对应参数,到register
中解包,这样便可以将对应参数传给bp,并调用add_url_rule
方法
# -*- 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
# -*- 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
# -*- 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
分类:
Flask
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?