本文介绍: 号称Python史上最快的Web框架,你用过吗?

作者主页】:吴秋霖
作者介绍】: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框架,并且流行度越来越广泛

3. Sanic框架实战

3.1. 安装Sanic

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

pip3 install sanic

在这里插入图片描述

3.2. Demo案例编写

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

# -*- coding: utf-8 -*-
from sanic import Sanic
from sanic import response

app = 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, InMemorySessionInterface

app = 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.json
    username = data.get("username")
    password = data.get("password")

    if username in users_db:
        return response.json({"message": "Username already exists"}, status=400)

    users_db[username] = password
    return response.json({"message": "Registration successful"})

@app.route("/login", methods=["POST"])
async def login(request):
    data = request.json
    username = 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.json
    username = 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] = quantity
    else:
        carts_db[username][product_id] += quantity

    return 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用于对框架提供的功能有更大灵活性和控制需求,以及对轻量级框架的偏好

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

原文地址:https://blog.csdn.net/qiulin_wu/article/details/134506652

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_10441.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注