当前位置: 首页 > news >正文

starlette笔记、和fastapi的区别

文章目录

        • starlette示例
      • 解读
        • 遇到的问题点

fastapi都很熟悉,那么starlette又是什么呢?

一行公式搞定:
fastapi = starlette+pydantic+openapi文档+路由参数校验

starlette是fastapi的底层实现。

starlette示例

前提:
pycharm项目,解释器、虚拟环境已准备好。

1、安装依赖

pip install fastapi# 安装fastapi时会自动带上starlette

2、创建main.py,代码:

# main.pyfromstarlette.applicationsimportStarlettefromstarlette.responsesimportJSONResponsefromstarlette.routingimportRoute,WebSocketRoutefromstarlette.middleware.corsimportCORSMiddlewarefromstarlette.endpointsimportWebSocketEndpointimportuvicorn# 1. 定义普通的 HTTP 视图函数(带路径参数)asyncdefuser_detail(request):# 从请求中解析动态路径参数 /user/{user_id}user_id=request.path_params.get("user_id")returnJSONResponse({"user_id":user_id,"name":f"User-{user_id}","message":"Hello from Starlette!"})# 2. 定义 WebSocket 服务端点classChatWebSocket(WebSocketEndpoint):encoding="text"# 消息编码格式asyncdefon_connect(self,websocket):awaitwebsocket.accept()# 接受客户端连接awaitwebsocket.send_text("连接成功!")asyncdefon_receive(self,websocket,data):# 收到客户端消息后回复awaitwebsocket.send_text(f"服务端收到你的消息:{data}")asyncdefon_disconnect(self,websocket,close_code):pass# 客户端断开连接时的处理逻辑# 3. 定义路由表routes=[Route("/user/{user_id:int}",endpoint=user_detail,methods=["GET"]),WebSocketRoute("/ws",ChatWebSocket)]# 4. 初始化 Starlette 应用并添加 CORS 中间件app=Starlette(debug=True,routes=routes)app.add_middleware(CORSMiddleware,allow_origins=["*"],# 允许所有来源allow_methods=["*"],# 允许所有 HTTP 方法allow_headers=["*"]# 允许所有请求头)# 5. 启动入口if__name__=="__main__":uvicorn.run("main:app",host="0.0.0.0",port=8000,reload=True)

3、运行main.py
4、浏览器输入http://127.0.0.1:8000/user/123,看到如下内容即为成功。

{"user_id":123,"name":"User-123","message":"Hello from Starlette!"}

解读

发现没有,app.add_middleware等代码很熟悉,fastapi中也有用,因为底层本来就是starlette。

遇到的问题点

这块代码遇到点疑问,这个websocket是哪里传的呢?是WebSocketEndpoint的属性吗?

classChatWebSocket(WebSocketEndpoint):encoding="text"# 消息编码格式asyncdefon_connect(self,websocket):awaitwebsocket.accept()# 接受客户端连接awaitwebsocket.send_text("连接成功!")

后来发现自己理解错了,正确的答案应该是:
websocket是方法的入参,但是websocket不一定是类的属性,也可以是方法中的临时变量,

asyncdefon_connect(self,websocket):awaitwebsocket.accept()# 接受客户端连接awaitwebsocket.send_text("连接成功!")

在这里on_connect()是重写了父类的方法。
看源码知道websocket是__call__方法里面的一个临时变量。

http://www.jsqmd.com/news/941996/

相关文章:

  • 3分钟极速上手:DeepL Chrome翻译插件让你轻松阅读全球网页
  • 苏州黄金回收踩过坑才敢告诉你:找这5家就够了,价高又省心 - 商业快讯早知道
  • 2026年环氧树脂胶厂家实力测评:口碑推荐榜与选型指南 - 资讯速览
  • 温州阀组组件厂家排名TOP榜,这家资质齐全更靠谱(2026年6月最新) - 商业新知
  • 闲置包包别乱卖!大连济南通用奢侈品回收避坑测评 - 奢侈品回收测评
  • Rainmeter终极性能优化指南:打造高效桌面监控系统
  • 告别密码焦虑:手把手教你用KeePass+插件打造个人专属密码库(附Chrome自动填充配置)
  • 2026宁德房屋漏水不用愁!一修修缮免费上门检测,本地专业防水公司常年TOP1!卫生间免砸砖防水,快速解决您的烦恼。权威!靠谱!稳定!售后无忧!!! - 一修哥咨询
  • Umi-OCR:5分钟学会这款免费离线OCR文字识别工具
  • 别再只会用id和class了!Selenium自动化测试中XPath相对路径的5个实战技巧(附Chrome调试方法)
  • S3.2自我中心陷阱——如何真正理解你的用户
  • 从Fusion360设计到CNC加工:DIY层叠式2.1声道音箱全流程实战
  • Advanced C# Tips: Use in Parameter Modifier for Large Value Types
  • 为什么供应商入驻政采服务平台总选错?5项原因拆解 - 资讯速览
  • VS2022安装Resharper C++插件踩坑实录:从下载龟速到激活成功的保姆级排雷手册
  • 终极解决方案:免费开源KeyboardChatterBlocker彻底解决键盘连击问题
  • 终极指南:用Mac Mouse Fix彻底改造你的Mac鼠标体验 [特殊字符]
  • 广州包包回收避坑指南!2026正规门店教你闲置名包高价变现不踩雷 - 薛定谔的梨花猫
  • 终极指南:如何用OpenCore Legacy Patcher让老旧Mac重获新生并优化电池续航
  • 高效多屏工作空间实战指南:Windows虚拟显示器深度解析
  • 3个免费开源项目管理痛点,GanttProject一站式解决
  • 2026年宁夏钢结构源头工厂实力盘点:西北装配式建筑与冷库工程一站式方案对比指南 - 优质企业观察收录
  • 2026年西北钢结构装配式建筑供应商选型指南:宁夏银衡发18年源头工厂直供对比评测 - 优质企业观察收录
  • MBF v2.0开发预览版深度解析:.NET生物信息学库架构重构与性能优化
  • 为什么你的AI虚拟主播总卡顿?深度拆解直播推流协议栈与AI推理引擎的3层时序冲突
  • 用SAM做图像分割?先搞懂点、框、掩码提示该怎么选(附使用场景建议)
  • 如何高效使用智能中文文献管理工具:Jasminum插件完全操作指南
  • 零成本搭建专业直播设备:DroidCam OBS插件完全指南
  • 九江本地家电维修师傅电话推荐|本地维修家电|欧米到家统一报修 - 欧米到家
  • Vintern-1B-v2-ViTable-docvqa未来展望:越南语多模态AI的5大发展趋势