尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Lumi进阶实战:自定义路由与GET/POST/PUT/PATCH请求方法配置指南

Lumi进阶实战:自定义路由与GET/POST/PUT/PATCH请求方法配置指南 Lumi进阶实战自定义路由与GET/POST/PUT/PATCH请求方法配置指南【免费下载链接】lumiLumi is an nano framework to convert your python functions into a REST API without any extra headache.项目地址: https://gitcode.com/gh_mirrors/lu/lumiLumi 是一个极简的 Python 框架能把你的 Python 函数直接变成 REST API 服务几乎零学习成本。本文面向新手手把手讲解 Lumi 进阶实战中的两大核心能力自定义路由与GET/POST/PUT/PATCH 请求方法配置帮助你在 5 分钟内掌握 Lumi 自定义路由技巧。一分钟回顾函数如何变成 API在开始进阶内容前先回顾 Lumi 的基本工作方式。你只需要写一个普通 Python 函数再通过app.register()注册Lumi 就会自动把它映射成一个可访问的 REST 端点# app.py from lumi import Lumi def add(a, b): return a b app Lumi() app.register(add) app.runServer(host127.0.0.1, port8080)启动服务后默认生成的 API 信息为项目默认值端点127.0.0.1:8080路由/add与函数名相同请求方法POST请求体示例{a: 1, b: 2}也就是说默认情况下路由名 函数名请求方法 POST。接下来我们就打破这两个默认规则。自定义路由route 参数让函数名与路由解耦在实际项目中你常常不希望暴露函数名比如函数叫add但 API 路径想用/addition。Lumi 提供了route参数来覆盖默认路由app.register(add, route/addition)一行代码函数add就绑定到了/addition上。关于路由的几个小细节逻辑位于 lumi/api.py 的register方法中✅ 路由名不带前导斜杠也能识别routeaddition与route/addition效果一致Lumi 会自动补上/✅尾部斜杠会被自动去掉route/addition/最终注册为/addition⚠️ 同一个路由在不同请求方法下可以分别绑定不同函数后面会用到这一点# 测试自定义路由 curl -X POST -H Content-Type: application/json \ -d {a: 1, b: 2} http://127.0.0.1:8080/addition响应保持统一的四字段结构{ exit_code: 0, status_code: 200, result: 3, error: }GET/POST/PUT/PATCH四种请求方法配置指南Lumi 通过request_method参数指定路由绑定的请求方法取值来自 lumi/enums.py 中定义的RequestMethod枚举支持GET、POST、PUT、PATCH四种方法from lumi import Lumi, RequestMethod app Lumi() def add(a, b): return a b # 不传参数时默认注册为 POST 方法 app.register(add) # 为 GET 方法注册 app.register(add, request_methodRequestMethod.GET) # 为 PUT 方法注册 app.register(add, request_methodRequestMethod.PUT) # 为 PATCH 方法注册 app.register(add, request_methodRequestMethod.PATCH) app.runServer() 由于路由表是按「请求方法 → 路由 → 函数」分层的见 lumi/api.py 中function_routing_map的结构你可以让同一个路由在不同方法下调用同一个或不同的函数非常适合按 REST 语义拆分接口。GET 请求的两条特别注意GET 方法与其它三种方法在参数传递上有本质区别新手最容易踩坑参数必须放在查询字符串Query String中因为 GET 不支持请求体所有参数到达函数时都是字符串类型需要在函数内部自行转换。def add(a, b): # 注意GET 请求下 a、b 都是字符串需要手动转换 return int(a) int(b) app.register(add, request_methodRequestMethod.GET)# 参数通过 URL 查询串传递 curl http://127.0.0.1:8080/add?a1b2查询参数的解析实现在 lumi/helpers.py 的parseQueryParameter函数中它会把QUERY_STRING转换成键值对字典再传入函数。POST/PUT/PATCH 的统一规则这三种方法共享一套参数规则见 lumi/api.py 中wsgi_app的校验逻辑参数通过JSON 请求体传递例如{a: 1, b: 2}请求头必须为Content-Type: application/json否则返回415 Unsupported Media Type缺少函数必需的参数时返回400 Bad Request# PUT 方法示例 curl -X PUT -H Content-Type: application/json \ -d {a: 1, b: 2} http://127.0.0.1:8080/add 语义建议POST用于创建、PUT用于整体替换、PATCH用于局部更新Lumi 不做强制限制由你按 REST 规范自行设计。状态码速查表快速定位 API 问题状态码含义常见原因200请求成功执行一切正常400Bad Request缺少函数必需参数 / JSON 解析失败404Not Found该路由下没有绑定对应方法的函数405Method Not Allowed使用了 GET/POST/PUT/PATCH 以外的方法如 DELETE415Unsupported Media TypePOST/PUT/PATCH 请求的 Content-Type 不是 application/json500函数执行出错函数内部抛出异常error字段会给出错误信息响应中的exit_code字段用于程序化判断0表示无错误1表示执行出错。进阶小技巧生产环境关闭调试app Lumi(debugFalse)可关闭终端日志打印避免暴露内部路由信息debug参数定义于 lumi/api.py 的构造函数函数直接返回文件对象函数return open(file.txt, rb)即可让 API 以附件形式下发文件本地开发服务app.runServer()底层使用 waitress 启动开发服务器见 lumi/server.py生产环境建议用 Gunicorn 管理因为 Lumi 本身就是一个标准 WSGI 应用总结三步完成自定义路由与方法配置改路由app.register(函数, route/自定义路径)改方法app.register(函数, request_methodRequestMethod.GET)处理参数GET 请求走查询串并手动转换类型POST/PUT/PATCH 走 JSON 请求体至此你已经掌握了 Lumi 自定义路由与请求方法配置的全部核心技巧。Lumi 的核心代码量非常小配合 lumi/init.py 导出的Lumi与RequestMethod两个入口几分钟就能把任意 Python 函数发布为规范的 REST API。【免费下载链接】lumiLumi is an nano framework to convert your python functions into a REST API without any extra headache.项目地址: https://gitcode.com/gh_mirrors/lu/lumi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表