flask-admin 在modelview 视图中重写on_model_change 与after_model_change

背景:

当我们在使用flask-admin进行WEB开发时应该第一时间想到的是竟可能使用框架推荐的modelView模型,其次才是自定义模型 baseview,因为只有modelview模型下开发才能最大限度的提高效率。

制作:

1、在modelview视图下框架会通过默认视图进行展示模型信息,有时候因业务需要在模型数据增改时需要做一些前置或者后置操作。

2、框架提供on_model_change和 after_model_change2个函数来分别应模型数据修改前和修改后事件

    def after_model_change(self, form, model, is_created):
        """
            Perform some actions after a model was created or updated and
            committed to the database.

            Called from create_model after successful database commit.

            By default does nothing.

            :param form:
                Form used to create/update model
            :param model:
                Model that was created/updated
            :param is_created:
                True if model was created, False if model was updated
        """
        pass

    def on_model_change(self, form, model, is_created):
        """
            Perform some actions before a model is created or updated.

            Called from create_model and update_model in the same transaction
            (if it has any meaning for a store backend).

            By default does nothing.

            :param form:
                Form used to create/update model
            :param model:
                Model that will be created/updated
            :param is_created:
                Will be set to True if model was created and to False if edited
        """
        pass
  

注意:a、2个函数的model中都可以拿到当前模型兑换ing表单form 信息和DB模型信息

           b、这2个函数只能在modelview 模型及其子模型中生效

Flask中,类视图(Class-Based Views)是一种使用类来定义视图的方法。类视图需要重写`dispatch_request`方法,以便在请求到来时调用该方法处理请求。 以下是一些关于类视图和`dispatch_request`方法的介绍: 1. **类视图的定义**: 类视图是通过继承自`flask.views.View`或`flask.views.MethodView`来定义的。`MethodView`提供了一种更简便的方式来定义基于HTTP方法(如GET、POST等)的视图。 2. **重写`dispatch_request`方法**: `dispatch_request`方法是在请求到来时被调用的方法。你需要在类视图重写这个方法,以便自定义请求处理逻辑。 3. **示例代码**: 下面是一个简单的示例,展示了如何在Flask中定义一个类视图重写`dispatch_request`方法: ```python from flask import Flask, jsonify from flask.views import View app = Flask(__name__) class MyView(View): def dispatch_request(self): return jsonify({'message': 'Hello, World!'}) app.add_url_rule('/myview', view_func=MyView.as_view('myview')) if __name__ == '__main__': app.run(debug=True) ``` 在这个示例中,`MyView`类继承自`flask.views.View`,并重写了`dispatch_request`方法。`dispatch_request`方法返回一个JSON响应。 4. **使用`MethodView`**: `MethodView`是`flask.views.View`的子类,提供了一种更简便的方式来定义基于HTTP方法的视图。以下是使用`MethodView`的示例: ```python from flask import Flask, jsonify from flask.views import MethodView app = Flask(__name__) class MyMethodView(MethodView): def get(self): return jsonify({'message': 'GET request'}) def post(self): return jsonify({'message': 'POST request'}) app.add_url_rule('/mymethodview', view_func=MyMethodView.as_view('mymethodview')) if __name__ == '__main__': app.run(debug=True) ``` 在这个示例中,`MyMethodView`类继承自`flask.views.MethodView`,并定义了`get`和`post`方法,分别处理GET和POST请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值