一起学习Python的Sanic框架:路由和蓝图
  TEZNKK3IfmPf 2024年08月09日 28 0

Sanic 支持路由装饰器将处理函数映射到 HTTP 请求。我们可以在“路由”装饰器中使用名为 ​​methods​​ 的可选参数来处理列表中的任何 HTTP 方法。蓝图是一个概念,用于将子路由从大型应用程序的子模块插入 Sanic 应用程序。蓝图必须注册到 Sanic 应用程序对象中。使用蓝图还可以避免在整个应用程序中传递 Sanic 应用程序对象。

一般来说,蓝图包括 MVC 框架中的 ​​view.py​​和 ​​model.py​​。但为什么叫蓝图呢?每个子目录将包含远远超过一个蓝图对象。关键是要强化这样一个概念,即这个目录中的所有东西都是围绕这些离散的组件之一来解决的。

蓝图定义

根据​​官方文档​​,我们可以知道:

蓝图是应用中可以作为子路由的对象。蓝图定义了同样的添加路由的方式,您可以将一系列路由注册到蓝图上而不是直接注册到应用上,然后再以可插拔的方式将蓝图注册到到应用程序。

创建蓝图

在下面的程序中,我们能够将这些路由组合到一个单一的蓝图中。重要的是,这使我们能够将URL路径(​​/my_bp​​)的共同部分拉到蓝图中,这使我们能够灵活地在未来做出改变。

无论你决定如何组织你的文件结构,你可能总是应该使用蓝图。它们使组织更容易,甚至可以嵌套。就个人而言,我只在最琐碎的网络应用中使用 ​​@app.route​​。对于任何真正的项目,我总是将路由附加到蓝图中。

from sanic import response
from sanic import Blueprint

my_bp = Blueprint("my_blueprint")

@my_bp.route('/my_bp')
async def my_bp_func(request):
return response.text("My First Blueprint")

注册蓝图

仅仅创建我们的蓝图是不够的。Python 没有办法知道它们的存在。我们需要导入我们的蓝图并将它们附加到我们的应用程序中。这可以通过一个简单的注册方法完成:​​app.blueprint()​

from controller import my_bp

app = Sanic(__name__)
app.blueprint(my_bp)

整体演示

为了演示路由和蓝图的使用,新建一个 ​​main.py​​ 文件:

from sanic import Sanic
from sanic import response
from sanic.log import logger
from controller import my_bp

app = Sanic("main")

app.blueprint(my_bp)

@app.route('/')
def run(request):
return response.text("Hello World!")


@app.route('/post', methods=['POST'])
def on_post(request):
try:
return response.json({
"host": request.host,
"content": request.json,
})
except Exception as ex:
import traceback
logger.error(f"{traceback.format_exc()}")

app.run(host='127.0.0.1', port=8080, debug=True)

然后新建一个 ​​controller.py​​ :

from sanic import response
from sanic import Blueprint


my_bp = Blueprint("my_blueprint")

@my_bp.route('/my_bp')
async def my_bp_func(request):
return response.text("My First Blueprint")

让我们运行 ​​main.py​​ ,访问​,能看到如下结果:

一起学习Python的Sanic框架:路由和蓝图

并在访问 ​,能看到我们的蓝图结果显示 :

一起学习Python的Sanic框架:路由和蓝图

我们可以使用 Postman 客户端来展示我们的 POST 请求:

一起学习Python的Sanic框架:路由和蓝图

回到服务器也能看到如下的后台信息:

一起学习Python的Sanic框架:路由和蓝图

总结

最先在 Flask 框架中了解到蓝图的概念,但是在Sanic中,组织所谓组件的标准方法也是蓝图。因此,每个子目录将有一个而且只有一个蓝图对象。本文简单介绍了蓝图的定义,然后通过创建和注册蓝图,做了一个简单的演示,但这对于蓝图的理解远远不够。

因为蓝图对大型应用是理想的。一个项目可以实例化一个应用对象,初始化几个扩展,并注册一集合的蓝图。根据官方文档,蓝图对于大型应用特别有用。在大型应用中,您可以将应用代码根据不同的业务分解成多个蓝图。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年08月09日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   9天前   16   0   0 编程开发
TEZNKK3IfmPf