请求响应

Oasis 的请求操作可以如视图函数一样返回请求响应 (HttpResponseBase 对象)。

但为了开发便利,请求操作也可以不必直接返回请求响应。

返回字符串

@Resource("/api")
class API:
    def get(self):
        return "Hello World"

备注

等同于

@Resource("/api")
class API:
    def get(self):
        return HttpResponse("Hello World")

返回可被 JSON 编码的对象

@Resource("/api")
class API:
    def get(self):
        return {"message": "Hello World"}

备注

等同于

@Resource("/api")
class API:
    def get(self):
        return JsonResponse({"message": "Hello World"})

返回 None

@Resource("/api")
class API:
    def get(self):
        return None

备注

等同于

@Resource("/api")
class API:
    def get(self):
        return HttpResponse()

Response Schema

当返回一个不可被正常编码的对象时,可以通过使用 response_schema 参数设置一个 Schema,它会在响应过程中对返回值进行序列化。

response_schema.py [示例1]
from dataclasses import dataclass
from datetime import datetime

from django_oasis import schema
from django_oasis.core import Operation, Resource


# 这里用 dataclass 来模拟创建对象
@dataclass
class Book:
    title: str
    created_at: datetime


class BookSchema(schema.Model):
    title = schema.String()
    created_at = schema.Datetime()


@Resource("/api")
class API:
    @Operation(
        response_schema=BookSchema,
    )
    def get(self):
        return Book(
            title="The Book",
            created_at=datetime.now(),
        )

备注

等同于

@Resource("/api")
class API:
    def get(self):
        book = Book(
            title="The Book",
            created_at=datetime.now(),
        )
        data = BookSchema().serialize(book)
        return JsonResponse(data)

虽然结果一致,但是 response_schema 还会为 OAS 提供响应描述。

SwaggerUI [示例1]