当前位置: 首页 > 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.gsyq.cn/news/1453419.html

相关文章:

  • 2026年环氧树脂胶厂家实力测评:口碑推荐榜与选型指南 - 资讯速览
  • 为什么供应商入驻政采服务平台总选错?5项原因拆解 - 资讯速览
  • 从Fusion360设计到CNC加工:DIY层叠式2.1声道音箱全流程实战
  • 高效多屏工作空间实战指南:Windows虚拟显示器深度解析
  • 终极指南:如何用OpenCore Legacy Patcher让老旧Mac重获新生并优化电池续航
  • MBF v2.0开发预览版深度解析:.NET生物信息学库架构重构与性能优化
  • 用SAM做图像分割?先搞懂点、框、掩码提示该怎么选(附使用场景建议)
  • TMSpeech:3倍效率提升的Windows实时语音转文字解决方案
  • 2026南宁黄金回收实测|5家正规门店深度对比!透明报价零套路变现攻略 - 奢侈品回收测评
  • UE5.1 C++开发第一步:保姆级VS2022社区版安装与必备组件勾选指南
  • 从标注到训练:手把手教你用EISeg+PaddleSeg打造自己的图像分割模型(附避坑指南)
  • 专升本汉语言文学资料|2026古代文学现代文学真题PDF电子版
  • 专升本医学综合资料|2026解剖生理病理药理真题PDF电子版
  • 除了Excel,律所还有什么更好的案件管理方式?三种方案的深度对比
  • HarmonyOS 应用国际化和主题适配:ResUtil 综合运用实战指南
  • SMUDebugTool终极指南:如何深度掌控AMD Ryzen处理器硬件参数
  • Mac窗口置顶终极指南:用Topit三步打造高效多任务工作流
  • 鄂伦春自治旗26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 鄂托克旗26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 终极指南:RimSort开源模组管理器让环世界游戏体验更完美
  • 如何3步搭建你的私有知识库:AnythingLLM终极指南
  • OptiScaler终极指南:跨平台显卡超分辨率优化工具完全解析
  • 望花区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 文圣区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 抖音视频批量下载终极指南:免费工具实现高效内容保存
  • Anagrelide阿那格雷治血小板增多症0.5mg起始每日两次,头痛心悸常见,严重肝损禁用
  • 西丰县26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • Claude-Mem故障排查与性能优化:3步解决AI记忆丢失与响应缓慢问题
  • LVGL多线程刷新UI,不用全局锁也能避免内存踩踏?我的实战避坑方案
  • 西市区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化