实例 Instance


最基本的构建块是Sanic()实例。这不是必需的,但习惯是在一个名为server.py.

# /path/to/server.pyfrom sanic import Sanicapp = Sanic("My Hello, world app")

应用上下文 Application context


大多数应用程序都需要在代码库的不同部分共享/重用数据或对象。最常见的例子是数据库连接。

在 v21.3 之前的 Sanic 版本中,这通常通过将属性附加到应用程序实例来完成

# Raises a warning as deprecated feature in 21.3
app = Sanic("MyApp")
app.db = Database()

因为这可能会产生名称冲突的潜在问题,并且为了与请求上下文对象保持一致,v21.3 引入了应用程序级上下文对象。

# Correct way to attach objects to the application
app = Sanic("MyApp")
app.ctx.db = Database()


应用注册表App Registry


当您实例化 Sanic 实例时,稍后可以从 Sanic 应用程序注册表中检索该实例。这可能很有用,例如,如果您需要从无法以其他方式访问的位置访问您的 Sanic 实例。

# ./path/to/server.py
from sanic import Sanicapp = Sanic("my_awesome_server")# ./path/to/somewhere_else.py
from sanic import Sanicapp = Sanic.get_app("my_awesome_server")

如果你调用Sanic.get_app(“non-existing”)一个不存在的应用程序,它会SanicException默认引发。相反,您可以强制该方法返回具有该名称的 Sanic 的新实例。

app = Sanic.get_app("non-existing",force_create=True,
)

如果只注册了一个Sanic 实例,则不Sanic.get_app()带参数调用将返回该实例

Sanic("My only app")app = Sanic.get_app()

**

配置Configuration

**
Sanic 将配置保存config在Sanic实例的属性中。可以修改配置或者使用点符号或像一本字典。

app = Sanic('myapp')app.config.DB_NAME = 'appdb'
app.config['DB_USER'] = 'appuser'db_settings = {'DB_HOST': 'localhost','DB_NAME': 'appdb','DB_USER': 'appuser'
}
app.config.update(db_settings)

注意:
配置键应该是大写的。但是,这主要是约定俗成的,大部分时间小写都可以。

app.config.GOOD = "yay!"
app.config.bad = "boo"

自定义Customization


Sanic 应用程序实例可以在实例化时以多种方式根据您的应用程序需求进行定制。


自定义配置Custom configuration


这种最简单的自定义配置形式是将您自己的对象直接传递到该 Sanic 应用程序实例中

from sanic.config import Configclass MyConfig(Config):FOO = "bar"app = Sanic(..., config=MyConfig())

如果您创建自定义配置对象,强烈建议您子类化 SanicConfig选项以继承其行为。您可以使用此选项添加属性或您自己的自定义逻辑集。

此功能的一个有用示例是,如果您想以与支持的形式不同的形式使用配置文件。

from sanic import Sanic, text
from sanic.config import Configclass TomlConfig(Config):def __init__(self, *args, path: str, **kwargs):super().__init__(*args, **kwargs)with open(path, "r") as f:self.apply(toml.load(f))def apply(self, config):self.update(self._to_uppercase(config))def _to_uppercase(self, obj: Dict[str, Any]) -> Dict[str, Any]:retval: Dict[str, Any] = {}for key, value in obj.items():upper_key = key.upper()if isinstance(value, list):retval[upper_key] = [self._to_uppercase(item) for item in value]elif isinstance(value, dict):retval[upper_key] = self._to_uppercase(value)else:retval[upper_key] = valuereturn retvaltoml_config = TomlConfig(path="/path/to/config.toml")
app = Sanic(toml_config.APP_NAME, config=toml_config)

自定义上下文Custom context


默认情况下,应用程序上下文是 SimpleNamespace() (打开新窗口)这允许您设置您想要的任何属性。但是,您也可以选择传递任何对象。

# case1
app = Sanic(..., ctx=1)
#case2
app = Sanic(..., ctx={})
#case3
class MyContext:...app = Sanic(..., ctx=MyContext())

自定义请求Custom requests


有时拥有自己的Request类会很有帮助,并告诉 Sanic 使用它而不是默认值。一个例子是如果您想修改默认request.id生成器。

import timefrom sanic import Request, Sanic, textclass NanoSecondRequest(Request):@classmethoddef generate_id(*_):return time.time_ns()app = Sanic(..., request_class=NanoSecondRequest)@app.get("/")
async def handler(request):return text(str(request.id))

注意: 重要的是要记住,您传递的是类而不是类的实例。


自定义错误处理程序 Custom error handler


from sanic.handlers import ErrorHandlerclass CustomErrorHandler(ErrorHandler):def default(self, request, exception):''' handles errors that have no error handlers assigned '''# You custom error handling logic...return super().default(request, exception)app = Sanic(..., error_handler=CustomErrorHandler())

【Sanic】Sanic应用 2相关推荐

  1. python框架sanic_Python Web框架Sanic框架初识

    Sanic 既是一个Python web 服务器,又是一个web框架,它为速度而生.Sanic只支持Python 3.5及其以上版本,允许我们使用 async/await 语法来使我们的代码非阻塞且快 ...

  2. Sanic部署(1)

    最近不知道为什么开始搞模型工程化了 以前都是用Flask写的非常糙 最近公司用Sanic部署,所以研究了一下 首先是主函数 main.py from sanic import Sanic from s ...

  3. 《SANIC中文用户指南》—读书笔记

    SANIC 中文用户指南 SANIC API文档 Sanic是Python3.7+Web服务器和Web框架,旨在提高性能.它允许使用Python3.5中添加async/await 语法,使代码有效的避 ...

  4. python sanic部署_Sanic 部署

    部署Sanic的方法有很多种,可以通过内置的 webserver,也可以通过Gunicorn等. 内置webserver 定义sanic.Sanic实例后,我们可以使用下面的关键字参数调用run方法: ...

  5. python sanic部署_Sanic框架应用部署方法详解

    本文实例讲述了Sanic框架应用部署方法.分享给大家供大家参考,具体如下: 简介 Sanic是一个类似Flask的Python 3.5+ Web服务器,它的写入速度非常快.除了Flask之外,Sani ...

  6. 【小伟哥AI之路】Python之sanic异步框架使用精解

    快速开始 在安装Sanic之前,让我们一起来看看Python在支持异步的过程中,都经历了哪些比较重大的更新. 首先是Python3.4版本引入了asyncio,这让Python有了支持异步IO的标准库 ...

  7. python sanic openapi_Python sanic-openapi3e包_程序模块 - PyPI - Python中文网

    Sanic OpenAPI V3e 对sanic的openapi v3支持.记录并描述所有参数, 包括Sanic路径参数.Python3.5+ 安装pip install sanic-openapi3 ...

  8. 基于docker+gunicorn部署sanic项目

    基于docker+gunicorn部署sanic项目 源代码: https://github.com/ltoddy/Python-useful/tree/master/sanic-app 最近云服务提 ...

  9. python sanic部署_Sanic框架配置操作分析

    本文实例讲述了Sanic框架配置操作.分享给大家供大家参考,具体如下: 简介 Sanic是一个类似Flask的Python 3.5+ Web服务器,它的写入速度非常快.除了Flask之外,Sanic还 ...

  10. python个人博客源码_我的使用Sanic的个人博客源码开源了!

    在 用asyncio写一个技术博客 里面说到的使用Sanic的个人博客已经完成了,先通过一个短视频来感受下效果吧: 我使用Sanic的博客源码开源了!https://www.zhihu.com/vid ...

最新文章

  1. linux平台调试终端,10款Linux平台上优秀的调试器,总有一款适合你!
  2. vba获取通达信光标的坐标数据_「高阶应用」谈一下VB6和VBA的坐标系统
  3. QLoo推出用于现有服务的GraphQL接口
  4. Flask和mysql多线程_Flask解析(二):Flask-Sqlalchemy与多线程、多进程
  5. GLSL/C++ 实现滤镜效果
  6. POJ 1577 Falling Leaves(二叉查找树)
  7. HTML5的离线储存
  8. 乐高创意机器人moc_LEGO乐高MOC作品欣赏:超有爱机器人偶E-MOTE
  9. linux命令fs ls,Linux 命令:fsdisk
  10. Triangular Pastures
  11. linux grep 正则 id,浅谈Linux grep与正则表达式
  12. 计算机视觉图像去噪原理,AI笔记: 计算机视觉之图像滤波去噪: 原理、方法和效果比较...
  13. bus Hound使用详解
  14. 如何在 R 中计算 Eta 平方
  15. 使用SMMU的PMU查看性能数据
  16. 【操作系统】第一章 概论 冲鸭!!
  17. 伯俊软件获得阿里云原生核心授牌伙伴认证,共建新生态
  18. NODE安装和使用说明,报错处理方法
  19. 4只鸭子在同一个圆圈内游泳,问:4只鸭子出现在同一个半圆内的概率是多少?Python模拟
  20. for...in 与 for...of 的用法与区别

热门文章

  1. 一文详解:java开发安卓应用
  2. IDEA创建ZK框架入门Hello word
  3. Navicat for mysql 运行.sql 文件时 出现的错误
  4. vscode没法选python解释器interpreter
  5. 2023年MathorCup数模A题赛题详细思路
  6. Linux-简易使用
  7. [转]mysql的sql优化工具
  8. 一步关闭win10的自动更新,win10系统优化
  9. QIIME 2 2020.8 版本更新学习
  10. MongoDB 遇见 spark(进行整合)