从flask_restful迁移到flask_restx时add_resource方法传参报错
问题原因
Flask-RESTx 的 Resource 类构造函数会自动传入 api 和 namespace 作为位置参数,而你自定义的 ProductManagement 的 __init__ 方法没有接收这些参数,当通过 resource_class_kwargs 传入自定义关键字参数时,就会触发参数重复传递的错误。
解决方案
修改 ProductManagement 的构造方法,先接收 Flask-RESTx 自动传入的参数,再处理自定义参数,有两种常用方式:
方式一:显式接收父类所需参数
class ProductManagement(Resource): def __init__(self, api, namespace, rate_limiter, authentication, product_controller): # 调用父类构造方法,传入自动生成的api和namespace参数 super().__init__(api, namespace) self.result = [] self.parser = reqparse.RequestParser() self.parser.add_argument('company_id', type=str) self.rate_limiter = rate_limiter self.authentication = authentication self.product_controller = product_controller
方式二:用可变参数兼容父类参数(更灵活)
class ProductManagement(Resource): def __init__(self, *args, rate_limiter, authentication, product_controller, **kwargs): # 调用父类构造方法,传入所有位置参数和额外关键字参数 super().__init__(*args, **kwargs) self.result = [] self.parser = reqparse.RequestParser() self.parser.add_argument('company_id', type=str) self.rate_limiter = rate_limiter self.authentication = authentication self.product_controller = product_controller
调整后,add_resource 的调用代码无需修改,即可正常传递 resource_class_kwargs 中的参数。
内容的提问来源于stack exchange,提问作者Kit bender
相关产品推荐
相关产品推荐

