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

Flask 处理具有重复函数名的视图,flask,Flask,在Flask中,是否有任何方法可以处理跨文件视图的重复函数名问题?我要说的是函数名,而不是为函数定义的路由。想象一下在file1.py中我得到了: @app.route('/some/unique/route') def duplicateFunctionName(): ...python code... @app.route('/another/unique/route/name') def duplicateFunctionName(): ...python code...

在Flask中,是否有任何方法可以处理跨文件视图的重复函数名问题?我要说的是函数名,而不是为函数定义的路由。想象一下在
file1.py中我得到了:

@app.route('/some/unique/route')
def duplicateFunctionName():
   ...python code...
@app.route('/another/unique/route/name')
def duplicateFunctionName():
   ...python code...
然后在
file2.py中,我得到:

@app.route('/some/unique/route')
def duplicateFunctionName():
   ...python code...
@app.route('/another/unique/route/name')
def duplicateFunctionName():
   ...python code...
然后在
main.py
中导入以下视图函数:

import file1
import file2

<<code to run the flask server>>
导入文件1
导入文件2
<运行flask服务器的代码>

问题是在大型项目中,很难保持函数名的唯一性。在某些情况下,您肯定会有两个名为
def saveData()
或其他什么的函数,调试这些问题非常困难。有解决这个问题的好办法吗?

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

  • 使用
    端点
    关键字参数来
    路由

    @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\u等进行寻址。但是,您需要确保所有端点名称都是唯一的,因此这并不完美

  • 使用
    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\u one.duplicateFunctionName
    module\u two.duplicateFunctionName


  • 除非您使用的是来自fileN import*
    ,否则这两个函数将保留在各自的名称空间中,分别为
    file1.duplicateFunctionName
    file2.duplicateFunctionName