gpt4 book ai didi

python - 如何在 Flask 中设置 Inherited MethodView 对 sqlalchemy 模型进行 CRUD 操作

转载 作者:行者123 更新时间:2023-12-01 03:06:53 26 4
gpt4 key购买 nike

为了避免为我的模型编写 api 方法 View 。我希望创建一种更优雅的继承方式来做到这一点。

class ModelCrudAPI(MethodView):

def __init__(self, model):
self.model = model

def get(self):
store_id = request.args.get("store_id", None, int)
waiters = self.model.query.filter_by(store_id=store_id).all()

if waiters is None or store_id is None:
return jsonify({'items': [], 'store_id': store_id}), 204

# TODO: change personnel_data to list
else:
items = []
for waiter in waiters:
items.append(row2dict(waiter))
return jsonify({"items": items, 'store_id': store_id})

我之前在这个问题中设置过类似的继承。 previous question about inheritance and decorators in methodviews

请注意,我想将 sqlalchemy 模型传递给我的类(class)。

第一个场景

class Test(ModelCrudAPI):

def __init__(self, model):
super(Test, self).__init__(model)

api.add_url_rule("/test", view_func=Test(MYMODEL).as_view("test"), methods=['GET','POST','PUT','DELETE'])

错误:

flask debuger :TypeError: __init__() takes exactly 2 arguments (1 given)

第二种情况)

class Test(ModelCrudAPI):

def __init__(self, MYMODEL):
super(Test, self).__init__(MYMODEL)

api.add_url_rule("/test", view_func=Test.as_view("test"), methods=['GET','POST','PUT','DELETE'])

错误:

flask debuger :TypeError: __init__() takes exactly 2 arguments (1 given)

我真的很感激任何帮助。这将清理我的代码。

编辑此作品

class Test(ModelCrudAPI):
def __init__(self):
ModelCrudAPI.__init__(self, Personnel)


api.add_url_rule("/test", view_func=Test.as_view("test"), methods=['GET','POST','PUT','DELETE'])

最佳答案

as_view是一个类方法,它将提供给它的参数转发给类的构造函数。因此,您所要做的就是将模型作为第二个参数传递给as_view:

class Test(ModelCrudAPI):
def __init__(self, model):
super(Test, self).__init__(model)

api.add_url_rule("/test", view_func=Test.as_view("test", MYMODEL), methods=['GET','POST','PUT','DELETE'])

关于python - 如何在 Flask 中设置 Inherited MethodView 对 sqlalchemy 模型进行 CRUD 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43310740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com