未提供项目描述
项目描述
django-dataclass-autoserialize
对oxan的django-dataclass-serialize(临时托管在此)的微小修改扩展。使其与drf-yasg的使用更加愉快。
此软件包的目标是将APIView代码尽可能简洁。它试图解决的主要痛点是
- 必须单独定义参数类和序列化。
- 与drf-yasg很好地集成,无需重复信息。
安装
pip install django-dataclass-autoserialize
文档
简单用法
这是一个典型用法的示例。直接从示例项目中拉取。
from __future__ import annotations
from django_dataclass_autoserialize import AutoSerialize, swagger_post_schema, swagger_get_schema
from dataclasses import dataclass
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.views import APIView
@dataclass
class InputParam(AutoSerialize):
a: int
b: int
@classmethod
def example(cls) -> InputParam:
# this is actually optional but it will show up
# in swagger doc
return cls(a=3, b=2)
@dataclass
class ComputeResponse(AutoSerialize):
msg: str
result: int
@classmethod
def example(cls) -> ComputeResponse:
return cls(msg='hello world', result=5)
class AddView(APIView):
@swagger_post_schema(
body_type=InputParam,
response_types={200: ComputeResponse}
)
def post(self, request: Request) -> Response:
param = InputParam.from_post_request(request)
return ComputeResponse(msg='add successfully',
result=param.a + param.b).to_response()
class SubtractView(APIView):
@swagger_get_schema(
query_type=InputParam,
response_types={200: ComputeResponse}
)
def get(self, request: Request) -> Response:
param = InputParam.from_get_request(request)
return ComputeResponse(msg='subtract successfully',
result=param.a - param.b).to_response()
Swagger将显示如下
自定义
在底层,它使用djangorestframework-dataclasses。因此,可以对dataclass进行的所有自定义也在此处应用。例如,您可以添加如下serializer_kwargs
@dataclasses.dataclass
class Person:
email: str = dataclasses.field(metadata={'serializer_field': fields.EmailField()})
age: int = dataclasses.field(metadata={'serializer_kwargs': {'min_value': 0}})
验证
可以通过重写validate_data(cls, obj)
方法来执行对象的验证。例如
class Numbers(AutoSerialize):
a: int
b: int
@classmethod
def validate_data(cls, obj: Numbers) -> Numbers:
from rest_framework.exceptions import ValidationError
if obj.a + obj.b > 1000:
raise ValidationError('too big')
return obj
Swagger
drg-yasg的集成通过swagger_get_schema
和swagger_get_schema
装饰器完成。请参阅使用示例。除了query_type/body_type
和response_types
之外的键词都转发到drf-yasg的swagger_auto_schema
。
项目详情
关闭
django_dataclass_autoserialize-1.0.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4d5cb43fb52dbf2a578c8cc1716578866dce5456d94b1052f7c65553e6031e6f |
|
MD5 | 804f5e14144b24be2d4e02156b39aa3d |
|
BLAKE2b-256 | 1aae548fd73fae07196d8709371cda33f98bedecbf2cec18c888bdaef7a620c3 |