2013-04-12 27 views
1

我在my_module.py中有我的应用程序,并且在posts /中有请求处理程序。帖子里面有几个不同的python文件。Python模块与Flask碰撞命名空间

我的应用程序的结构是这样的:

./ 
    my_module.py 
    posts/ 
     __init__.py 
     post1.py 
     post2.py 
     post3.py 

,因此在POST1,POST2和post3,有2个功能:添加和删除。

在my_module,我进口post1-3像这样:

import posts.post1 
import posts.post2 
import posts.post3 

我在my_module指向添加和删除功能view_functions像这样的路线:

app.add_url_rule('/post1_add', methods=['POST'], view_func=posts.post1.add) 
app.add_url_rule('/post1_delete', methods=['POST'], view_func=posts.post1.delete) 

app.add_url_rule('/post2_add', methods=['POST'], view_func=posts.post2.add) 
app.add_url_rule('/post2_delete', methods=['POST'], view_func=posts.post2.delete) 

app.add_url_rule('/post3_add', methods=['POST'], view_func=posts.post3.add) 
app.add_url_rule('/post3_delete', methods=['POST'], view_func=posts.post3.delete) 

出于某种原因,当我向上面添加的任何网址发布了发布请求时,他们都指向请求添加到最后一个网址的成员。在这种情况下是posts.post3。

当我将成员函数名称更改为唯一的时,如post1_add,应用程序使用其view_function正确发出请求。

这是什么原因造成的?

回答

2

add_url_rule使用__name__作为默认端点名称,端点名称必须在某种程度上唯一标识端点。

通过端点名add_url_rule,如:

app.add_url_rule('/posts1_add', methods['POST'], 'posts1_add', posts.post1.add) 

但这种设计模式,你或许应该使用Blueprints我想。