Django Ninja v1.4.0 版本发布:文件上传优化与验证增强
Django Ninja 是一个基于 Django 的现代 Web API 框架,它结合了 Django 的稳定性和 FastAPI 的现代化特性,为开发者提供了高性能、易用的 API 开发体验。最新发布的 v1.4.0 版本带来了一系列重要改进,特别是在文件上传处理、验证错误自定义和性能优化方面。
文件上传功能增强
在之前的版本中,Django Ninja 在处理非 POST 请求(如 PUT、PATCH)时存在一个常见问题:request.FILES 不会被自动填充。这导致许多开发者在实现文件上传 API 时遇到验证失败的问题,不得不手动添加中间件来解决。
v1.4.0 版本对此进行了改进,现在当用户使用非 POST 方法时,Django Ninja 会自动检测并提示用户需要添加相应的中间件。这一改进显著提升了开发体验,减少了配置上的困惑。
分页性能优化
分页功能在这个版本中得到了两方面的增强:
-
异步视图性能提升:针对异步视图的分页操作进行了专门优化,提高了处理大量数据时的响应速度。
-
DRF 风格的分页参数:新增了对
page_size参数的支持,这与 Django REST Framework 的分页行为保持一致,使得从 DRF 迁移过来的开发者能够更轻松地适应。
验证错误处理改进
验证错误处理机制在这个版本中变得更加灵活:
- 验证失败现在会抛出
ninja.errors.ValidationError(注意与pydantic.ValidationError区分) - 默认异常处理器会返回 422(Unprocessable Content)状态码和标准化的错误响应格式
- 新增了
validation_error_from_error_contexts方法,允许开发者完全自定义验证错误的返回格式
正则表达式模式验证
v1.4.0 完全支持 Pydantic 的最新正则表达式模式验证功能,开发者现在可以在路径参数和查询参数中直接使用正则表达式进行额外验证:
@router.get("/path/param-pattern/{item_id}")
def get_path_param_pattern(request, item_id: str = Path(..., pattern="^foo")):
return item_id
自定义 Django 模型字段支持
新增了标准化的方式来注册自定义 Django 字段到 Pydantic 类型:
from ninja.orm import register_field
register_field("MyCustomField", int)
这一功能使得集成项目中自定义的模型字段变得更加简单和规范。
节流功能增强
节流(Throttling)系统现在支持多周期间隔配置,例如:
5/30s:每30秒5次10/5m:每5分钟10次100/2h:每2小时100次
相比之前只支持单周期间隔(如 5/s、100/d),这一改进提供了更灵活的速率限制配置选项。
其他重要改进
-
操作默认选项:允许为操作设置默认选项,简化了常见配置的重复设置。
-
IPNetwork 和 URL 序列化:新增了对这些特殊类型的序列化支持。
-
认证错误区分:明确区分了身份验证错误(AuthenticationError)和授权错误(AuthorizationError),便于更精确的错误处理。
-
测试工具增强:TestClient 现在支持 COOKIES,并改进了查询参数的处理方式。
总结
Django Ninja v1.4.0 版本在保持框架简洁性的同时,通过一系列实用改进增强了其功能和灵活性。特别是文件上传处理的优化、验证错误的自定义支持以及分页性能的提升,都将显著改善开发者的使用体验。对于正在寻找一个既保留 Django 优势又具备现代 API 框架特性的开发者来说,这个版本值得关注和升级。
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00- DDeepSeek-OCR暂无简介Python00
openPangu-Ultra-MoE-718B-V1.1昇腾原生的开源盘古 Ultra-MoE-718B-V1.1 语言模型Python00
HunyuanWorld-Mirror混元3D世界重建模型,支持多模态先验注入和多任务统一输出Python00
AI内容魔方AI内容专区,汇集全球AI开源项目,集结模块、可组合的内容,致力于分享、交流。03
Spark-Scilit-X1-13BFLYTEK Spark Scilit-X1-13B is based on the latest generation of iFLYTEK Foundation Model, and has been trained on multiple core tasks derived from scientific literature. As a large language model tailored for academic research scenarios, it has shown excellent performance in Paper Assisted Reading, Academic Translation, English Polishing, and Review Generation, aiming to provide efficient and accurate intelligent assistance for researchers, faculty members, and students.Python00
GOT-OCR-2.0-hf阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00- HHowToCook程序员在家做饭方法指南。Programmer's guide about how to cook at home (Chinese only).Dockerfile013
Spark-Chemistry-X1-13B科大讯飞星火化学-X1-13B (iFLYTEK Spark Chemistry-X1-13B) 是一款专为化学领域优化的大语言模型。它由星火-X1 (Spark-X1) 基础模型微调而来,在化学知识问答、分子性质预测、化学名称转换和科学推理方面展现出强大的能力,同时保持了强大的通用语言理解与生成能力。Python00- PpathwayPathway is an open framework for high-throughput and low-latency real-time data processing.Python00