首页 > 编程语言 >【Web开发】Python实现Web服务器(Sanic)

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

时间:2022-10-09 22:10:15浏览次数:72  
标签:Web get Python app Sanic request sanic def


文章目录

1、简介

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

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

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

  • 目标(Goal)
    提供一种简单且快速,集创建和启动于一体的方法,来实现一个易于修改和拓展的 HTTP 服务。
  • 特征(Features)
    内置极速 web server
    生产准备就绪
    极高的拓展性
    支持 ASGI
    简单直观的 API 设计
    社区保障

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

2、安装

2.1 安装sanic

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

pip install

【Web开发】Python实现Web服务器(Sanic)_web框架_03

2.2 安装sanic拓展

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

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

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

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
  • 更改python快捷方式
    查看python版本
pip --version

查看python命令指代的版本

cd  /usr/bin
ls -l | grep

删除python2.7快捷方式

sudo rm

创建python3.8快捷方式,安装pip3

sudo ln -s  python3.6m python
sudo apt-get install

创建python虚拟环境
安装Virtualenv

sudo pip install

创建项目,修改权限

sudo mkdir /root/flowerdance
sudo chmod 777

创建虚拟环境venv

mkvirtualenv -p python3 venv
virtualenv venv

进入虚拟环境

source

安装必要的库

pip install

运行测试程序:

sanic test_sanic.app

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

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

python -m ensurepip
python -m pip install
sudo apt install
curl

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

install sanic
or
pip install

【Web开发】Python实现Web服务器(Sanic)_web框架_07

3、示例测试

【Web开发】Python实现Web服务器(Sanic)_前端_08

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)_web框架_09


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

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

#!/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)_sanic_11

>>> 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)_前端_12

from sanic.response import text

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

标签:Web,get,Python,app,Sanic,request,sanic,def
From: https://blog.51cto.com/u_15800063/5741653

相关文章

  • 基于python的汽车销售网站设计与实现-计算机毕业设计源码+LW文档
    本科生毕业论文(设计)开题报告题目基于Python的汽车销售平台设计与实现学生姓名学  号指导教师学   院计算机科学与技术专  业计算机科学与技术职称助教选......
  • 基于python企业对账分析系统设计与实现-计算机毕业设计源码+LW文档
    就是收入支出申报 管理员审批 然后可以通过日期查到集体的交易往来。最少要有收入支出申报和审批两种账号 和日期查询记录这样开发语言:Python框架:djangoPython......
  • 学习python-Day69
    今日学习内容一、权限类的使用使用步骤:写一个类,继承BasePermission重写has_permission方法在方法中校验用户是否有权限(request.user)就是当前登录用户有权......
  • python 字典
    字典key:Value通过key(关键字)查到Value(信息值)。#1.字典的定义字典同样使用{},不过存储的是一个一个的键值对,如下列语法:#定义字典的字面量{key:Value,key:Value,...,key......
  • python函数
    python函数函数引入当我们正常情况下需要统计列表中的数据之个数name_list=['jason','kevin','oscar','jerry']print(len(name_list))当len方法不可以使用后co......
  • 函数概念及python函数语法
    函数函数的应用场景函数是广泛应用于编程语言的一个方法,能够用于解决代码冗余的问题。我们来看这么一个场景:#校验程序userinfo={#用字典存储用户的状态'na......
  • 分享Go书籍-《Go Web编程》
    大家好,我是沙漠尽头的狼。最近几天在看一本Go的书籍,看了100来页,感觉不错,分享给大家。书籍基本信息书籍信息:书名:GoWeb编程作者:(新加坡)郑兆雄(SauSheongChang)著;黄健......
  • python基础入门之函数
    python基础入门之函数目录python基础入门之函数一、函数的概念二、函数的语法结构1、格式2、格式信息的解释三、函数的定义与调用四、函数分类五、函数的返回值1、什么是......
  • qt使用webengine加载web页面
    #include"mainwindow.h"#include"ui_mainwindow.h"#include<QUrl>#include<QtWebEngineWidgets/QWebEngineView>MainWindow::MainWindow(QWidget*parent):QMainWi......
  • python文件操作
    python文件操作文件的概念文件就像是系统呈现在我们面前的能够使用硬盘的快捷方式,文件可以是文本文档、图片、程序等等。文件通常具有点+三个字母的文件扩展名,用于指示文......