跳转至

请求解析器

在大多数情况下,REST API 的默认内容类型是 JSON,但如果你需要处理其他内容类型(如 YAML、XML、CSV)或使用更快的 JSON 解析器,Django Ninja 提供了一个 解析器 配置。

api = NinjaAPI(parser=MyYamlParser())

要创建你自己的解析器,你需要扩展 ninja.parser.Parser 类,并覆盖 parse_body 方法。

示例 YAML 解析器

让我们创建我们自定义的 YAML 解析器:

import yaml
from typing import List
from ninja import NinjaAPI
from ninja.parser import Parser


class MyYamlParser(Parser):
    def parse_body(self, request):
        return yaml.safe_load(request.body)


api = NinjaAPI(parser=MyYamlParser())


class Payload(Schema):
    ints: List[int]
    string: str
    f: float


@api.post('/yaml')
def operation(request, payload: Payload):
    return payload.dict()

如果你现在像这样发送 YAML 作为请求主体:

ints:
 - 0
 - 1
string: hello
f: 3.14

它将被正确解析,并且你应该有像这样的 JSON 输出:

{
  "ints": [
    0,
    1
  ],
  "string": "hello",
  "f": 3.14
}

示例 ORJSON 解析器

orjson 是一个用于 Python 的快速、准确的 JSON 库。它在基准测试中是最快的 Python JSON 库,并且比标准的 json 库或其他第三方库更准确。

pip install orjson

解析器代码:

import orjson
from ninja import NinjaAPI
from ninja.parser import Parser


class ORJSONParser(Parser):
    def parse_body(self, request):
        return orjson.loads(request.body)


api = NinjaAPI(parser=ORJSONParser())

大功告成

继续下一章节! 过滤

评论


本文总阅读量