找回密码
 会员注册
查看: 23|回复: 0

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

[复制链接]

1

主题

0

回帖

4

积分

新手上路

积分
4
发表于 2024-9-10 15:42:06 | 显示全部楼层 |阅读模式
文章目录1.写在前面2.Sanic框架简介2.1背景2.2特征与优势3.Sanic框架实战3.1.安装Sanic3.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:pip3installsanic13.2.Demo案例编写如下是一个简单的Sanic应用程序,实现了基本的路由与请求:#-*-coding:utf-8-*-fromsanicimportSanicfromsanicimportresponseapp=Sanic("sanic_demo")@app.route("/")defrun(request):returnresponse.text("HelloWorld!")if__name__=='__main__':app.run(host="0.0.0.0",port=8001,debug=True)123456789101112在终端中运行上面应用程序:程序运行后我们在浏览器地址中访问http://127.0.0.1:8001就可以看到返回的信息了接下来我们编写一个稍微复杂的案例代码,这是一个简化的在线商店系统,包括用户注册、商品管理、购物车等功能。实际真实的商城会更加复杂#-*-coding:utf-8-*-fromsanicimportSanic,responsefromsanic.exceptionsimportNotFound,ServerErrorfromsanic_jwtimportInitialize,protectedfromsanic_sessionimportSession,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("/")asyncdefhome(request):returnresponse.text("欢迎来到爬虫商店!")@app.route("/register",methods=["POST"])asyncdefregister(request):data=request.jsonusername=data.get("username")password=data.get("password")ifusernameinusers_db:returnresponse.json({"message":"Usernamealreadyexists"},status=400)users_db[username]=passwordreturnresponse.json({"message":"Registrationsuccessful"})@app.route("/login",methods=["POST"])asyncdeflogin(request):data=request.jsonusername=data.get("username")password=data.get("password")ifusernamenotinusers_dborusers_db[username]!=password:returnresponse.json({"message":"Invalidcredentials"},status=401)token=app.auth.jwt_encode(request,{"username":username})returnresponse.json({"token":token})@app.route("/products",methods=["GET"])@protected()asyncdefget_products(request):returnresponse.json({"products":products_db})@app.route("/add_to_cart",methods=["POST"])@protected()asyncdefadd_to_cart(request):data=request.jsonusername=request.ctx.get("user").get("username")product_id=data.get("product_id")quantity=data.get("quantity",1)ifproduct_idnotinproducts_db:returnresponse.json({"message":"Productnotfound"},status=404)ifusernamenotincarts_db:carts_db[username]={}ifproduct_idnotincarts_db[username]:carts_db[username][product_id]=quantityelse:carts_db[username][product_id]+=quantityreturnresponse.json({"message":"Productaddedtocart"})@app.route("/view_cart",methods=["GET"])@protected()asyncdefview_cart(request):username=request.ctx.get("user").get("username")ifusernamenotincarts_db:returnresponse.json({"cart":{}},status=200)returnresponse.json({"cart":carts_db[username]})#ErrorHandlers@app.exception(NotFound)asyncdefnot_found(request,exception):returnresponse.json({"message":"NotFound"},status=404)@app.exception(ServerError)asyncdefserver_error(request,exception):returnresponse.json({"message":"InternalServerError"},status=500)if__name__=="__main__":app.run(host="0.0.0.0",port=8000,debug=True)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394在上面的代码中使用了Sanic框架处理用户注册、登录、商品管理、购物车等功能。同时,使用了SanicJWT进行用户身份验证和会话管理最后总结一下:Sanic适用于需要高性能、实时性的应用,以及小型到中型项目Django适用于大型、全功能的Web应用程序,尤其是需要使用内置功能快速构建应用的场景Flask适用于对框架提供的功能有更大灵活性和控制需求,以及对轻量级框架的偏好  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-7 06:40 , Processed in 0.465485 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表