Web开发Python实现Web服务器(Sanic)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web开发Python实现Web服务器(Sanic)相关的知识,希望对你有一定的参考价值。
1、简介
https://sanic.dev/zh/ https://github.com/sanic-org/sanic
-
目标(Goal) 提供一种简单且快速,集创建和启动于一体的方法,来实现一个易于修改和拓展的 HTTP 服务。
-
特征(Features) 内置极速 web server 生产准备就绪 极高的拓展性 支持 ASGI 简单直观的 API 设计 社区保障
2、安装
2.1 安装sanic
在我们开始之前,请确保您使用的是 Python3.7 或更高版本。目前已知可以使用的 Python 版本包括:3.7,3.8 和 3.9。
pip install sanic
2.2 安装sanic拓展
Sanic 致力于构建一个简洁且没有任何偏见的特征表。该项目不想要求您以某种方式构建应用程序,并试图避免指定特定的开发模式。有许多由社区构建和维护的第三方插件,用于添加不符合核心库要求的附加功能。 但是,为了 帮助 API 开发者 ,Sanic 组织维护了一个名为 Sanic Extensions 的项目来提供各种易用的功能,包括:
- OpenAPI 使用 Redoc 和/或 Swagger 的文档
- CORS 保护
- 依赖注入 路由处理程序
- Request 参数 检查
- 自动创建 HEAD, OPTIONS, 和 TRACE 响应函数
- 响应序列化
pip install sanic sanic-ext
2.3 安装ubuntu
- 安装python
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:jonathonf/python-3.8
sudo apt-get update
sudo apt-get install python3.8
- 更改python快捷方式 查看python版本
pip --version
查看python命令指代的版本
cd /usr/bin
ls -l | grep python
删除python2.7快捷方式
sudo rm python
创建python3.8快捷方式,安装pip3
sudo ln -s python3.6m python
sudo apt-get install python-pip
创建python虚拟环境 安装Virtualenv
sudo pip install virtualenv
创建项目,修改权限
sudo mkdir /root/flowerdance
sudo chmod 777 /root/flowerdance
创建虚拟环境venv
mkvirtualenv -p python3 venv
virtualenv venv
进入虚拟环境
source venv/bin/activate
安装必要的库
pip install -r requirements.txt
运行测试程序:
sanic test_sanic.app
<font color=red>有可能在用pip下载的时候出现错误: ModuleNotFoundError: No module named pip._internal,有可能是与旧版冲突,所以可能事先卸载旧版。</font>
python -m ensurepip
python -m pip install --upgrade pip
sudo apt install --fix-missing python3-pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py --force-reinstall
pip3 install sanic
or
pip install sanic
3、示例测试
3.1 Hello, world
- test_sanic.py
from sanic import Sanic
from sanic.response import text
app = Sanic("MyHelloWorldApp")
@app.get("/")
async def hello_world(request):
return text("Hello, world. 爱看书的小沐!")
- 命令行执行命令:
sanic test_sanic.app
<font color=blue>这是 另一个 重要的区别。其他框架带有一个内置的开发服务器,并明确表示它只用于开发。而 Sanic 的情况恰好相反。可以用于生产环境的服务器已经准备就绪。</font>
#!/usr/bin/env python
from sanic import Sanic
from sanic.response import text
app = Sanic("MyHelloWorldApp")
@app.get("/")
async def hello_world(request):
return text("Hello, world. 爱看书的小沐!")
## python -m sanic server.app --host=0.0.0.0 --port=1337 --workers=4
## sanic server:app --host=0.0.0.0 --port=1337 --fast
## sanic ./path/to/dir --simple
## sanic ./path/to/dir --simple --reload --reload-dir=./path/to/dir
app.run(host=0.0.0.0, port=1337, access_log=False)
# app.run(host=0.0.0.0, port=1337, workers=4)
# app.run(host=0.0.0.0, port=1337, fast=True)
3.2 配置(Configuration)
Sanic 将配置保存在 Sanic 对象的 config 属性中。可以使用 属性操作 或 字典操作 的方式来修改配置。
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)
如果您使用了自定义配置对象类,强烈建议 您将自定义类继承 Sanic 的 Config 类,以保持与父类行为一致。
from sanic.config import Config
class MyConfig(Config):
FOO = "bar"
app = Sanic(..., config=MyConfig())
3.3 响应函数(Handlers)
第二个重要的组件就是响应函数(Handlers),也就是我们通常所说的视图(views)。
在 Sanic 中,响应函数可以是任何一个可调用程序,它至少以一个 request 实例作为参数,并返回一个 HTTPResponse 实例或一个执行其他操作的协同程序作为响应。
def i_am_a_handler(request):
return HTTPResponse()
async def i_am_ALSO_a_handler(request):
return HTTPResponse()
from sanic.response import text
@app.get("/foo")
async def foo_handler(request):
return text("I said foo!")
@app.get("/sync")
def sync_handler(request):
time.sleep(0.1)
return text("Done.")
@app.get("/async")
async def async_handler(request):
await asyncio.sleep(0.1)
return text("Done.")
3.4 请求(Request)
Request 实例包含许多有关其参数的有用信息。
>>> print(request.args)
key1: [val1, val3], key2: [val2]
>>> print(request.args.get("key1"))
val1
>>> print(request.args.getlist("key1"))
[val1, val3]
>>> print(request.query_args)
[(key1, val1), (key2, val2), (key1, val3)]
>>> print(request.query_string)
key1=val1&key2=val2&key1=val3
3.5 响应(Response)
所有的 响应函数 都必须返回一个 response 对象,中间件 可以自由选择是否返回 response 对象。 Sanic 内置了 9 种常用的返回类型,您可以通过以下方式中的任意一种快速生成返回对象。
from sanic.response import text
@app.route("/")
async def handler(request):
return text("Hi 以上是关于Web开发Python实现Web服务器(Sanic)的主要内容,如果未能解决你的问题,请参考以下文章