目录

flask_restx-定义任意类型参数

目录

flask_restx 定义任意类型参数

之前定义的content只是string,现在需要支持即可以string也可以list

from flask_restx import fields

class Messages:

    def get_model(api):

        return api.model(

            "Message",

            {

                "role": fields.String(required=True, description="The role of message"),

                "content": fields.String(required=True, description="The content of message"),

            },

        )

一开始使用LLM查询,发现都是说定义成fields.Raw就行,但是定义成这个之后只要不是json格式就都会报错。

所以只好自己重写一个类,继承Raw然后重写他的schema方法

from flask_restx import fields

class AnyField(fields.Raw):
    def format(self, value):
        return value

    @property
    def __schema__(self):
        # 返回空字典,不对数据类型进行约束
        return {}
    
class Messages:
    def get_model(api):
        return api.model(
            "Message",
            {
                "role": fields.String(required=True, description="The role of message"),
                "content": AnyField(required=True, description="The content of message"),
            },
        )

用的时候一样就行:

from flask_restx import Namespace, Resource
api = Namespace('aggeragator', description='aggeragator endpoints')

@api.route('/completion')
class Completion(Resource):
    @api.doc('Interacting with specific models')
    @api.expect(Messages.get_model(api))
    @inject
    def post(self):
        data = api.payload
        ...