属性名与别名

首先来理清几个名词概念:“字段名”,“属性名” 和 “别名”。

schemas.py [示例1]
from django_oasis import schema


class Model(schema.Model):
    a = schema.Integer(attr="attr", alias="alias")

在这个示例中,Model 有一个字段 a。其中字面量 “a” 即为字段的字段名,它是不可变的。

attralias 参数则是用于设置 “属性名” 和 “别名” 的,它们分别对应了序列化和反序列化结果的字段名映射。默认情况下,它们都等于字段名。

这是它的序列化和反序列化运行结果:

>>> Model().serialize({'attr': 1})
{'alias': 1}

>>> Model().deserialize({'alias': 1})
{'attr': 1}

将其应用于请求中,则 “属性名” 对应用于服务端,而 “别名” 对应用于客户端。

views.py [示例1]
from django_oasis.core import Operation, Resource
from django_oasis.parameter import JsonData

from .schemas import Model


@Resource("/api")
class API:
    @Operation(response_schema=Model)
    def post(
        self,
        data=JsonData(Model),
    ):
        a = data["attr"]  # I am here
        ...
SwaggerUI [示例1]