一文带你快速了解Python史上最快Web框架

文章目录

  • 1. 写在前面
  • 2. Sanic框架简介
    • 2.1 背景
    • 2.2 特征与优势
  • 3. Sanic框架实战
    • 3.1. 安装Sanic
    • 3.2. Demo案例编写

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 写在前面

  在Python的Web开发领域内这些年框架也是层出不穷,早已不再局限于Django、Flask、Tornado甚至是后面的FastApi

曾经的玄冥二老也慢慢退居幕后,新的时代都是年轻人天下!这个时代的年轻王者无疑是Sanic

在网上有对Python所有的Web框架做过测试,可以看到曾经的老牌框架已经垫底:
在这里插入图片描述

官方地址:Sanic

从Python3+后,各种异步很火,所以说相对于传统的同步框架在某些特定的场景下更加适应,因为同步与异步在并发、实时性上还是有很大差异的

2. Sanic框架简介

2.1 背景

  Sanic最早由ChannelCat团队开发,旨在提供一个高性能的异步Web框架。其灵感来自于Flask,并在异步编程的基础上进行了优化。Sanic利用Python3.5引入的async/await语法,使得开发者可以编写快速且高效的异步Web应用程序

2.2 特征与优势

  江湖中的朋友们一直都称之为Python史上最强且最快的Web框架,并且流行度越来越广泛

  • 高性能:利用异步编程的优势,允许处理大量并发请求而不会阻塞线程,从而实现高性能和低延迟
  • 轻量级:核心设计非常简洁,不依赖大量的外部库,使得其体积小巧,易于部署和维护
  • 路由功能:提供了简单易用的路由功能,让开发者能够轻松地定义URL和处理请求的处理程序
  • 中间件支持:支持中间件,开发者可以在请求和响应处理过程中添加额外的逻辑
  • WebSocket支持:对WebSocket 提供了良好的支持,允许构建实时的双向通信应用程序

3. Sanic框架实战

3.1. 安装Sanic

  首先我们使用pip命令安装Sonic:

pip3 install sanic

在这里插入图片描述

3.2. Demo案例编写

如下是一个简单的Sanic应用程序,实现了基本的路由与请求:

# -*- coding: utf-8 -*-
from sanic import Sanic
from sanic import responseapp = Sanic("sanic_demo")@app.route("/")
def run(request):return response.text("Hello World !")if __name__ == '__main__':app.run(host="0.0.0.0", port=8001, debug=True)

在终端中运行上面应用程序:

在这里插入图片描述

程序运行后我们在浏览器地址中访问http://127.0.0.1:8001就可以看到返回的信息了

接下来我们编写一个稍微复杂的案例代码,这是一个简化的在线商店系统,包括用户注册、商品管理、购物车等功能。实际真实的商城会更加复杂

# -*- coding: utf-8 -*-
from sanic import Sanic, response
from sanic.exceptions import NotFound, ServerError
from sanic_jwt import Initialize, protected
from sanic_session import Session, InMemorySessionInterfaceapp = Sanic("OnlineStore")
app.config.SECRET_KEY = "supersecretkey"Initialize(app, authenticate=None)Session(app, interface=InMemorySessionInterface())users_db = {}
products_db = {}
carts_db = {}# Routes
@app.route("/")
async def home(request):return response.text("欢迎来到爬虫商店!")@app.route("/register", methods=["POST"])
async def register(request):data = request.jsonusername = data.get("username")password = data.get("password")if username in users_db:return response.json({"message": "Username already exists"}, status=400)users_db[username] = passwordreturn response.json({"message": "Registration successful"})@app.route("/login", methods=["POST"])
async def login(request):data = request.jsonusername = data.get("username")password = data.get("password")if username not in users_db or users_db[username] != password:return response.json({"message": "Invalid credentials"}, status=401)token = app.auth.jwt_encode(request, {"username": username})return response.json({"token": token})@app.route("/products", methods=["GET"])
@protected()
async def get_products(request):return response.json({"products": products_db})@app.route("/add_to_cart", methods=["POST"])
@protected()
async def add_to_cart(request):data = request.jsonusername = request.ctx.get("user").get("username")product_id = data.get("product_id")quantity = data.get("quantity", 1)if product_id not in products_db:return response.json({"message": "Product not found"}, status=404)if username not in carts_db:carts_db[username] = {}if product_id not in carts_db[username]:carts_db[username][product_id] = quantityelse:carts_db[username][product_id] += quantityreturn response.json({"message": "Product added to cart"})@app.route("/view_cart", methods=["GET"])
@protected()
async def view_cart(request):username = request.ctx.get("user").get("username")if username not in carts_db:return response.json({"cart": {}}, status=200)return response.json({"cart": carts_db[username]})# Error Handlers
@app.exception(NotFound)
async def not_found(request, exception):return response.json({"message": "Not Found"}, status=404)@app.exception(ServerError)
async def server_error(request, exception):return response.json({"message": "Internal Server Error"}, status=500)if __name__ == "__main__":app.run(host="0.0.0.0", port=8000, debug=True)

在上面的代码中使用了Sanic框架处理用户注册、登录、商品管理、购物车等功能。同时,使用了Sanic JWT进行用户身份验证和会话管理

最后总结一下:

Sanic适用于需要高性能、实时性的应用,以及小型到中型项目

Django适用于大型、全功能的Web应用程序,尤其是需要使用内置功能快速构建应用的场景

Flask适用于对框架提供的功能有更大灵活性和控制需求,以及对轻量级框架的偏好

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/204483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

报错:Uncaught ReferenceError: Cannot access ‘l‘ before initialization

在文件 .babelrc 或 babel.config.js ,webpack.config.js 下配置 .babel 或 babel.config.js "plugins": ["babel/plugin-transform-runtime" ] webpack.config.js,详见 Webpack target module.exports {target: [web, es5], }

NVRAM相关

1. Modem NVRAM四个分区 nvdata:手机运行过程中,使用(读写)的NVRAM(除了存在protect_f和protect_s中的NVRAM)都是该分区的nvram文件。存储着普通NVRAM数据、 IMEI、barcode、Calibration数据等。对应的modem path是Z:\NVRAM。NVRAM目录下有CALIBRAT、NVD…

Boost:asio单io_service,单线程run

io_service相当于注册异步回调的一个上下文环境,而run相当于处理异步io的上下文(通常是一个线程)。 比较常见的方式是一个io_service,一个运行run的线程,这种情况下所有的回调会依次在一个线程中排队一一处理: //si_st.cpp #include <boost/asio.hpp> #include &…

Goby 漏洞发布| Apache OFBiz webtools/control/xmlrpc 远程代码执行漏洞(CVE-2023-49070)

漏洞名称&#xff1a; Apache OFBiz webtools/control/xmlrpc 远程代码执行漏洞&#xff08;CVE-2023-49070&#xff09; English Name&#xff1a;Apache OFBiz webtools/control/xmlrpc Remote Code Execution Vulnerability (CVE-2023-49070) CVSS core: 9.8 影响资产数&…

前端React基础面试题,建议收藏!

1&#xff0c;说说react里面bind函数与箭头函数 bind 由于在类中&#xff0c;采用的是严格模式&#xff0c;所以事件回调的时候会丢失this指向&#xff0c;指向的undefined&#xff0c;需要使用bind来给函数绑定上当前实例的this指向。 箭头函数的this指向上下文&#xff0c;…

2023新优化应用:RIME-CNN-LSTM-Attention超前24步多变量回归预测算法

程序平台&#xff1a;适用于MATLAB 2023版及以上版本。 霜冰优化算法是2023年发表于SCI、中科院二区Top期刊《Neurocomputing》上的新优化算法&#xff0c;现如今还未有RIME优化算法应用文献哦。RIME主要对霜冰的形成过程进行模拟&#xff0c;将其巧妙地应用于算法搜索领域。 …

linux命令 cp复制

cp [OPTION]... SOURCE... DEST参数解释如下&#xff1a; [OPTION]&#xff1a;可选参数&#xff0c;用于指定 cp 命令的不同选项。SOURCE&#xff1a;源文件或目录的路径。可以指定一个或多个文件或目录。DEST&#xff1a;目标文件或目录的路径。 选项参数包括&#xff1a; …

外网的maven项目转移到内网操作的步骤

1、新起一个仓库路径testRep&#xff0c;idea 引用的maven里的setting.xml里仓库配置修改成刚才建的路径&#xff0c;目的把需要的jar全部下载到那个文件夹里 2、项目打压缩包&#xff0c;刚才仓库文件夹打压缩包&#xff0c;并复制到内网电脑 3、内网电脑idea引入项目 4、修改…

【离散数学】——期末刷题题库(等价关系与划分)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

Spring Boot HTTP 400 错误的日志信息在哪里查看 ?

HTTP 400 一般来说是入参的某些字段的格式不对 Spring Boot项目启动后默认是不会把相应的日志打印在控制台的 需要在logback.xml里面做相关的配置才会打印出来 具体配置如下 <configuration><appender name"stdout" class"ch.qos.logback.core.Con…

C# OpenVINO 模型信息查看工具

目录 效果 支持模型 项目 代码 下载 C# OpenVINO 模型信息查看工具 效果 支持模型 ONNX format (*.onnx) PDPD (*.pdmodel) TF (*.pb) TFLite (*.tflite) 项目 代码 using Sdcb.OpenVINO; using System; using System.Collections.Generic; using System.Text; using…

数据结构与算法(五)回溯算法(Java)

目录 一、简介1.1 定义1.2 特性1.3 结点知识补充1.4 剪枝函数1.5 使用场景1.6 解空间1.7 实现模板 二、经典示例2.1 0-1 背包问题2.2 N皇后问题 一、简介 1.1 定义 回溯法&#xff08;back tracking&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条…

Linux环境下的MySQL安装

文章目录 前提说明1.卸载内置环境2.检查系统安装包3.卸载这些默认安装包4.获取MySQL官方yum源5.安装MySQLyum源&#xff0c;对比前后yum源6.查看yum源是否生效7.安装MySQL服务8.查看相对应的配置文件9.启动服务10.查看启动服务11.登录方法一12.登录方法二13.登录方法三14.设置开…

两种做法——判断是否是二叉搜索树

https://leetcode.cn/problems/validate-binary-search-tree/description/?envTypestudy-plan-v2&envIdtop-interview-150 方法一&#xff1a;中序遍历 考虑只有两个节点和一个结点的情况&#xff0c;可以头尾各加一个最大最小值&#xff0c;不用特判了&#xff0c;也可…

谷达冠楠:现在做抖音电商到底怎么样

随着互联网的发展&#xff0c;电商行业也在不断地壮大。而近年来&#xff0c;抖音作为一款短视频社交平台&#xff0c;也逐渐成为了电商的新兴渠道。那么&#xff0c;现在做抖音电商到底怎么样呢? 首先&#xff0c;抖音拥有庞大的用户群体。根据数据显示&#xff0c;抖音的日活…

java实现Modbus通信

java实现Modbus通信 参考链接: https://www.cnblogs.com/ioufev/p/10831289.html https://blog.csdn.net/ioufev/article/details/100554691 Modbus协议 Modbus由MODICON公司于1979年开发&#xff0c;是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Mo…

C++中单引号‘‘和双引号““的区别

操作系统&#xff1a;Windows 10 IDE&#xff1a;CLion 单引号&#xff1a;表示一个字符&#xff0c;例如 a 双引号""&#xff1a;表示一个字符串&#xff0c;例如 "a" 在C中&#xff0c;使用双引号可以方便地创建字符串&#xff0c;而使用单引号可以方便…

Flask中redis的配置与使用

注意点&#xff1a; 在__init__.py中需要将redis_store设置成全局变量&#xff0c;这样方便其他文件导入 一、config.py import logging import os from datetime import timedeltafrom redis import StrictRedisclass Config:# 调试信息DEBUG TrueSECRET_KEY os.urandom(3…

Python语言基础知识(一)

文章目录 1、Python内置对象介绍2、标识符与变量3、数据类型—数字4、数据类型—字符串与字节串5、数据类型—列表、元组、字典、集合6、运算符和表达式7、运算符和表达式—算术运算符8、运算符和表达式—关系运算符9.1、运算符和表达式— 成员测试运算符in9.2、运算符和表达式…

领先英伟达的GPU1.6倍性能,AMD发布最强AI芯片Instinct MI300

AMD发布最强AI芯片 Instinct MI300X AI 加速器和 Instinct MI300A 数据中心 APU&#xff0c;声称比 Nvidia 的竞争 GPU 领先 1.6 倍。与 Nvidia 竞争产品相比&#xff0c;在以下几个关键方面展示了显著优势&#xff1a;配置方面 内存容量&#xff1a;MI300X&#xff1a;拥有 1…