Python 如何覆盖Flask应用程序';s视图函数

Python 如何覆盖Flask应用程序';s视图函数,python,flask,odoo,Python,Flask,Odoo,我将烧瓶(0.11.1)与OpenERP一起使用,并且: 我已经定义了一个url规则: @app.route(“/sync\u order”) def sync_order(): 印刷品(1) 我想在其他OE模块中覆盖它: @app.route(“/sync\u order”) def sync_order(): 印刷品(1) #覆盖它 @应用程序路径(“/sync\u order”) def sync_order2(): 印刷品(2) 但我有一个错误: AssertionError:Vie

我将烧瓶(0.11.1)与OpenERP一起使用,并且:

  • 我已经定义了一个url规则:
  • @app.route(“/sync\u order”)
    def sync_order():
    印刷品(1)
    
  • 我想在其他OE模块中覆盖它:
  • @app.route(“/sync\u order”)
    def sync_order():
    印刷品(1)
    #覆盖它
    @应用程序路径(“/sync\u order”)
    def sync_order2():
    印刷品(2)
    
  • 但我有一个错误:
  • AssertionError:View函数映射正在覆盖现有端点函数:sync\u order
    
  • 以下是我当前的解决方案:
  • @app.route(“/sync\u order”)
    def sync_order():
    印刷品(1)
    def sync_order2():
    印刷品(2)
    #更改端点和视图函数的映射
    #现在打印'2'
    使用app.app_context()作为上下文:
    context.app.view_函数['sync_order']=sync_order2
    
    所以我的问题是:

  • 这样做可以吗,还是我有潜在的问题
  • 是否有其他方法覆盖视图函数
  • 不要更改origin函数,因为如果我没有模块,函数应该打印1

  • 谢谢

    在sync_order函数中编写一些if语句,并根据if-else条件处理不同的事情,这是不可能的吗?我不确定这里的用例是什么,目前它对我来说没有意义,你想要实现什么。我不能以同步的顺序更改任何代码,这是开放式的。假设我有一个基本模块,定义了很多api(包括sync_顺序)来处理非常复杂的业务逻辑。现在我有了一个新模块,它将以sync_顺序更改一些业务逻辑,因此我需要重写sync_顺序函数,但我无法更改原始函数,因为如果我不安装新模块,api可以调用origin sync_order来处理origin业务。我只想更改url的处理程序,如何实现?有趣的案例,我不确定我的知识是否足以在这里提供帮助。总之,您不能更改sync_order函数的内容,因此您希望覆盖该函数。但是有没有可能添加一个定制的装饰器呢?我将使用上面的解决方案,谢谢你。在sync_order函数中编写一些if语句,并根据if-else条件处理不同的事情,这是不可能的吗?我不确定这里的用例是什么,目前它对我来说没有意义,你想要实现什么。我不能以同步的顺序更改任何代码,这是开放式的。假设我有一个基本模块,定义了很多api(包括sync_顺序)来处理非常复杂的业务逻辑。现在我有了一个新模块,它将以sync_顺序更改一些业务逻辑,因此我需要重写sync_顺序函数,但我无法更改原始函数,因为如果我不安装新模块,api可以调用origin sync_order来处理origin业务。我只想更改url的处理程序,如何实现?有趣的案例,我不确定我的知识是否足以在这里提供帮助。总之,您不能更改sync_order函数的内容,因此您希望覆盖该函数。但是有可能添加一个定制的装饰器吗?我会使用上面的解决方案,谢谢你