【Web开发】Python实现Web服务器(Sanic)

这篇具有很好参考价值的文章主要介绍了【Web开发】Python实现Web服务器(Sanic)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🍺基于Python的Web服务器系列相关文章编写如下🍺:

  1. 🎈【Web开发】Python实现Web服务器(Flask快速入门)🎈
  2. 🎈【Web开发】Python实现Web服务器(Flask案例测试)🎈
  3. 🎈【Web开发】Python实现Web服务器(Flask部署上线)🎈
  4. 🎈【Web开发】Python实现Web服务器(Tornado入门)🎈
  5. 🎈【Web开发】Python实现Web服务器(Tornado+flask+nginx)🎈
  6. 🎈【Web开发】Python实现Web服务器(FastAPI)🎈
  7. 🎈【Web开发】Python实现Web服务器(Bottle)🎈
  8. 🎈【Web开发】Python实现Web服务器(Django)🎈
  9. 🎈【Web开发】Python实现Web服务器(web2py)🎈
  10. 🎈【Web开发】Python实现Web服务器(Sanic)🎈

1、简介

https://sanic.dev/zh/
https://github.com/sanic-org/sanic

Sanic 是 Python3.7+ Web 服务器和 Web 框架,旨在提高性能。它允许使用 Python3.5 中添加的 async/await 语法,这使得您的代码有效的避免阻塞从而达到提升响应速度的目的。

【Web开发】Python实现Web服务器(Sanic)

  • 目标(Goal)
    提供一种简单且快速,集创建和启动于一体的方法,来实现一个易于修改和拓展的 HTTP 服务。

  • 特征(Features)
    内置极速 web server
    生产准备就绪
    极高的拓展性
    支持 ASGI
    简单直观的 API 设计
    社区保障

【Web开发】Python实现Web服务器(Sanic)

2、安装

2.1 安装sanic

在我们开始之前,请确保您使用的是 Python3.7 或更高版本。目前已知可以使用的 Python 版本包括:3.7,3.8 和 3.9。

pip install sanic

【Web开发】Python实现Web服务器(Sanic)

2.2 安装sanic拓展

Sanic 致力于构建一个简洁且没有任何偏见的特征表。该项目不想要求您以某种方式构建应用程序,并试图避免指定特定的开发模式。有许多由社区构建和维护的第三方插件,用于添加不符合核心库要求的附加功能。
但是,为了 帮助 API 开发者 ,Sanic 组织维护了一个名为 Sanic Extensions 的项目来提供各种易用的功能,包括:

  • OpenAPI 使用 Redoc 和/或 Swagger 的文档
  • CORS 保护
  • 依赖注入 路由处理程序
  • Request 参数 检查
  • 自动创建 HEAD, OPTIONS, 和 TRACE 响应函数
  • 响应序列化
pip install sanic sanic-ext

【Web开发】Python实现Web服务器(Sanic)

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 

【Web开发】Python实现Web服务器(Sanic)

有可能在用pip下载的时候出现错误: ModuleNotFoundError: No module named ‘pip._internal’,有可能是与旧版冲突,所以可能事先卸载旧版。

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

【Web开发】Python实现Web服务器(Sanic)

 pip3 install sanic
 or
 pip install sanic

【Web开发】Python实现Web服务器(Sanic)

3、示例测试

【Web开发】Python实现Web服务器(Sanic)

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

【Web开发】Python实现Web服务器(Sanic)
这是 另一个 重要的区别。其他框架带有一个内置的开发服务器,并明确表示它只用于开发。而 Sanic 的情况恰好相反。可以用于生产环境的服务器已经准备就绪。

【Web开发】Python实现Web服务器(Sanic)

#!/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 实例包含许多有关其参数的有用信息。
【Web开发】Python实现Web服务器(Sanic)

>>> 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 种常用的返回类型,您可以通过以下方式中的任意一种快速生成返回对象。
【Web开发】Python实现Web服务器(Sanic)

from sanic.response import text

@app.route("/")
async def handler(request):
    return text("Hi 😎")

3.6 路由(Routing)

每一个标准的 HTTP 请求方式都对应封装了一个简单易用的装饰器:
【Web开发】Python实现Web服务器(Sanic)

3.7 监听器(Listeners)

在 Sanic 应用程序的生命周期中 8 个切入点,在这些关键节点上设置监听器可以让您可以完成一些注入操作。但是这里并不包括信号,信号允许进一步的注入定制。
【Web开发】Python实现Web服务器(Sanic)

@app.reload_process_start
async def reload_start(*_):
    print(">>>>>> reload_start <<<<<<")


@app.main_process_start
async def main_start(*_):
    print(">>>>>> main_start <<<<<<")
 

3.8 中间件(Middleware)

监听器允许您将功能挂载到工作进程的生命周期,而中间件允许您将功能挂载到 HTTP 流的生命周期。

您可以在执行响应函数之前或者响应函数之后执行中间件。

【Web开发】Python实现Web服务器(Sanic)

3.9 标头(Headers)

请求头和响应头仅在对应的 Request 对象和 HTTPResponse 对象中起作用。它们使用 multidict 包(opens new window) 进行构建,这意味着它们允许一个键名具有多个对应值。

app.config.SERVER_NAME = "https://example.com"

@app.route("/hosts", name="foo")
async def handler(request):
    return json(
        {
            "effective host": request.host,
            "host header": request.headers.get("host"),
            "forwarded host": request.forwarded.get("host"),
            "you are here": request.url_for("foo"),
        }
    )

3.10 Cookies

response 的 cookies 可以通过和字典类型一样的操作方法来进行设置,而且它可以使用以下参数:
【Web开发】Python实现Web服务器(Sanic)

@app.route("/cookie")
async def test(request):
    response = text("There's a cookie up in this response")
    response.cookies["test"] = "It worked!"
    response.cookies["test"]["domain"] = ".yummy-yummy-cookie.com"
    response.cookies["test"]["httponly"] = True
    return response

3.11 后台任务(Background tasks)

在异步 Python 里使用 任务(opens new window) 是非常简单方便的,Sanic 提供了一种简单的方法来将任务添加到当前运行的 loop 当中, 它有点类似于 asyncio.create_task。

async def slow_work(...):
   ...

app = Sanic(...)
app.add_task(slow_work) # Note: we are passing the callable and not coroutine object `slow_work(...)`
app.run(...)

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!文章来源地址https://www.toymoban.com/news/detail-460049.html

到了这里,关于【Web开发】Python实现Web服务器(Sanic)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python-Python高阶技巧:HTTP协议、静态Web服务器程序开发、循环接收客户端的连接请求

    当前版本号[20231114]。 版本 修改说明 20231114 初版 1.1 网址的概念 网址又称为URL,URL的英文全拼是(Uniform Resoure Locator),表达的意思是 统一资源定位符 ,通俗理解就是网络资源地址。 URL地址:https://www.itcast.com/18/1122/10/E178J2O4000189FH.html 1.2 URL的组成 域名 : IP地址的别名 ,它是用

    2024年02月04日
    浏览(65)
  • 【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

    flask作为一个微框架,Flask 允许您以很少的开销构建 Web 服务。 它为您(设计师)提供了自由,以适合您的方式实施您的项目 特定应用。 一个最小的 Flask 应用如下: Flask-Admin是一个batteries-included,易于使用的Flask扩展,可让您 向 Flask 应用程序添加管理界面。它的灵感来自 d

    2024年02月02日
    浏览(89)
  • flask+Python+Vue实现前后端分离的web项目并部署至云服务器

    1 后台+算法模型 1.1 训练机器学习模型 1.2 基于Flask框架搭建后台接口 注意:前后端跨域问题,可引入CORS解决,具体如代码: 2 前端搭建 3 云服务器部署 详细设置教程可参考linux CentOS 宝塔面板安装设置教程 安装Nginx和python项目管理器,后续可在面板上操作,完成项目打包上传

    2024年02月07日
    浏览(64)
  • Python实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音

     本示例使用的设备:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com)

    2024年02月12日
    浏览(52)
  • C++ web server服务器 开发

    本文是牛客网Linux 高并发服务器开发视频教程的笔记 使用ssh在widows中控制Linux系统,使用vscode控制代码 使用g++编译 静态库与动态库的制作、区别 makefile文件操作就是指定所有源文件的编译顺序,因为一个正式的项目会有很多很多源文件,不可能一个个的手动g++,而且各种文

    2024年02月11日
    浏览(38)
  • Python IDE Pycharm服务器配置方法并结合内网穿透工具实现远程开发

    本文主要介绍如何使用Pycharm进行远程开发,并实现在家远程与公司服务器资源同步。 新版本 Jetbrains 系列开发IDE( IntelliJ IDEA , PyCharm , GoLand )等都支持远程使用服务器编译,并且可以 通过SFTP同步本地与服务器项目代码 。 这样做的好处是**我们只要连接上服务器就能开始

    2024年02月04日
    浏览(64)
  • 〖Web全栈开发③〗—HTTP协议和静态web服务器

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! TCP (Transmission Control Protocol) 是在互联网协议(IP)上的一种基于连接(面向连接)的传输层协议 。数据

    2024年02月05日
    浏览(43)
  • 探索Web开发的未来——使用KendoReact服务器组件

    Kendo UI是带有jQuery、Angular、React和Vue库的JavaScript UI组件的最终集合,无论选择哪种JavaScript框架,都可以快速构建高性能响应式Web应用程序。通过可自定义的UI组件,Kendo UI可以创建数据丰富的桌面、平板和移动Web应用程序。通过响应式的布局、强大的数据绑定、跨浏览器兼容

    2024年01月19日
    浏览(35)
  • 【小沐学Web】Rust实现Web服务器

    https://www.rust-lang.org/ Rust: 一种使每个人都能够构建可靠且高效的软件的语言。 如今,全球有数百家公司在生产环境中使用 Rust,以提供快速、资源少、跨平台的解决方案。您熟悉和喜爱的软件,例如Firefox、 Dropbox和Cloudflare,都使用 Rust。从初创公司到大公司,从嵌入式设备到

    2024年02月07日
    浏览(60)
  • ESP8266 ArduinoIDE 搭建web服务器与客户端开发

      此模式中,esp8266 会连接到指定 wifi 进行工作。    wifi 连接成功,esp8266 通过串口返回当前局域网 IP 此模式中,esp8266 会开启一个指定名称和密码的热点进行工作。      在这里改写了根目录,他会向客户端发送一个按钮的页面,点击即向 \\\"/LED\\\" 路由下发送 POST 请求。 由于

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包