处理具有重复函数名称的视图

时间:2014-06-25 18:21:39

标签: flask

在Flask中,有没有办法处理文件中视图的重复函数名称问题?为了清楚起见,我说的是函数的名称,而不是为函数定义的路径。想象一下file1.py我得到了:

@app.route('/some/unique/route')
def duplicateFunctionName():
   ...python code...

然后在file2.py我得到了:

@app.route('/another/unique/route/name')
def duplicateFunctionName():
   ...python code...

然后在main.py我导入这些视图函数:

import file1
import file2

<<code to run the flask server>>

问题在于,在大型项目中,保持函数名称的独特性非常困难。在某些时候,您必然会有两个名为def saveData()的函数或其他函数,并且很难调试这些问题。这个问题有一个优雅的解决方案吗?

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题。

  1. endpoint关键字参数用于.route

    @app.route('/some/unique/route', endpoint="unique_name_1")
    def duplicateFunctionName():
        pass
    
    @app.route('/another/unique/route', endpoint="unique_name_2")
    def duplicateFunctionName():
        pass
    

    这将确保您的所有功能都可以通过url_for等进行寻址。但是,您需要确保所有端点名称都是唯一的,因此它是&#39;不完美。

  2. 使用Blueprint将路由拆分为较小的独立包:

     bp1 = Blueprint("module_one", __name__)
    
     @bp1.route("/some/unique/route")
     def duplicateFunctionName():
         pass
    
     bp2 = Blueprint("module_two", __name__)
    
     @bp2.route("/another/unique/route")
     def duplicateFunctionName():
         pass
    

    这里的优点是端点名称以蓝图的名称为前缀,这意味着您现在有两个名称为duplicateFunctionName的端点,而不是两个端点具有冲突的名称module_one.duplicateFunctionName。和module_two.duplicateFunctionName