Bocadillo:又一个 Python 框架
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
大家好。在这篇文章中,我将介绍Bocadillo框架。如大家所知,Python中有很多Web框架。
过去几天,我一直在寻找能够提升自己的新技术。我在GitHub上发现了Bocadillo。
什么是博卡迪略?
Bocadillo 是一个现代化的 Python Web 框架,充满了异步 Salsa 元素。
您可以通过以下链接访问 Bocadillo 的网站:https://bocadilloproject.github.io/
您可以在 GitHub 上找到 Bocadillo:https://github.com/bocadilloproject/bocadillo
其主要特点是:
- 高效的
- 具备实时能力
- 灵活的
- 表演者
- 赋能
- 透明的
透明:所有代码均使用类型注解编写。
你还可以开发 WebSocket 应用。实际上,我认为它最大的卖点就是 WebSocket。
安装
Bocadillo 有一个用于创建项目的命令行工具。但是您无需安装该命令行工具。
CLI 安装
pip install bocadillo-cli
框架安装
pip install bocadillo
使用 virtualenv
mkdir my_first_app
cd my_first_app
virtualenv .
source bin/activate
pip install bocadillo
现在,我们安装了博卡迪略。
第一个 Bocadillo 应用
你可以使用你喜欢的编辑器或集成开发环境(IDE)。我会创建一个名为 app.py 的文件。
touch app.py
我会用nano编辑器编辑 app.py 文件。没错,这就是嬉皮士风格 :)
# app.py file
from bocadillo import App
app = App()
@app.route("/")
async def index(req, res):
res.text = "Hello Dev Family"
就这些了。Bocadillo 与 Flask 框架非常相似。要运行我们的第一个应用程序,我们将使用uvicorn。
别担心,它会自动弹出Bocadillo。你不需要再次安装。
uvicorn app:app --reload
我们将使用上述命令运行我们的第一个应用程序。执行此命令后,您将看到如下所示的输出;
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [24076]
INFO: Started server process [24078]
INFO: Waiting for application startup.
INFO: ASGI 'lifespan' protocol appears unsupported.
这意味着我们的 Web 应用运行在 8000 端口。干得好,我们创建了第一个应用。接下来,让我们修改应用,使用后台任务。
from asyncio import sleep
from bocadillo import App
app = App()
@app.route("/")
async def index(req, res):
try:
if req.query_params["wait"] == "true":
@res.background
async def waitForTest():
await sleep(15)
print("I'll work :)")
except:
print(":/")
res.text = "Hello Dev family"
后台任务是一种轻量级机制,用于在请求发送后执行处理操作,而无需客户端等待结果。典型的例子包括发送电子邮件或将日志发送到远程系统。
当后台任务注册到响应中时,它不会立即运行。相反,视图会像往常一样终止,并发送响应。只有在响应发送完毕后,后台任务才会执行。
这样可以防止客户端在收到响应之前等待后台任务完成。
如果尝试不使用后台任务,则需要等待 sleep 方法执行完毕。首先,您应该尝试上面的代码。
1)打开两个接线端子。
在第一个终端中运行此命令。
curl http://127.0.0.1:8000/?wait=true
立即在第二个终端中运行此命令。
curl http://127.0.0.1:8000/
所有终端都会输出“Hello Dev family”。你还需要查看运行第一个应用程序的原始终端。
15 秒后,您将看到“我会工作”的输出。
如果你不使用异步后台任务,就需要等待 sleep 方法完成。
import time
from bocadillo import App
app = App()
@app.route("/")
async def index(req, res):
try:
if req.query_params["wait"] == "true":
time.sleep(15)
print("I'll work :)")
except:
print(":/")
res.text = "Hello Dev family"
请记住,后台任务必须是非阻塞的。因为后台任务是一个协程,所以它必须是非阻塞的,以避免阻塞主线程并阻止请求被处理。
今天就到这里。
其他功能请参阅博卡迪略指南。博卡迪略是我介绍的。
指南:https://bocadilloproject.github.io/guide/
感谢阅读。
文章来源:https://dev.to/itachiuchiha/bocadillo-yet-another-python-framework-57ii

