跳转至

基于类视图的使用方法

使用 HTTPMethodView 来进行参数检查

您依旧可以像以前一样使用 parse_params 来为每个方法添加参数检查。

from sanic.response import json
from sanic.views import HTTPMethodView
from sanic_dantic import parse_params, BaseModel, Field


class Person(BaseModel):
    name: str = Field(description="name")
    age: int = Field(description="age")


class MyView(HTTPMethodView):

    @parse_params(query=Person)
    async def get(self, request, params):
        return json({"ctx": request.ctx.params, "params": params})

当然,parse_params 也可以添加到 decorators 的方式来进行使用。

from sanic.response import json
from sanic.views import HTTPMethodView
from sanic_dantic import parse_params, BaseModel, Field


class Person(BaseModel):
    name: str = Field(description="name")
    age: int = Field(description="age")


class MyView(HTTPMethodView):
    decorators = [parse_params(query=Person, methods=["GET"])]

    @staticmethod
    async def get(request, params):
        return json({"ctx": request.ctx.params, "params": params})

    @staticmethod
    async def post(request, params):
        return json({"ctx": request.ctx.params, "params": params})

使用 DanticView 来进行参数检查

除了使用 sanic 内置的 HTTPMethodView 之外,sanic-dantic 还提供了 DanticView ,它继承自 HTTPMethodView ,重写了 dispatch_request 方法,使其支持参数检查。

在继承 DanticView 时,需要定义对应的 {method}_model,例如 get_model 等。

from sanic.response import json
from sanic_dantic import DanticView, Field


class MyView(DanticView):

    @staticmethod
    async def get(request, params):
        return json({"ctx": request.ctx.params, "params": params})

    def get_model(self):
        class Person:
            name: str = Field(description="name")
            age: int = Field(description="age")

        return self.DanticModel(query=Person)