使用Flask在Python模块中碰撞命名空间

时间:2013-04-12 23:14:52

标签: python flask

我的应用程序在my_module.py中,我在帖子/中有请求处理程序。帖子里面有几个不同的python文件。

我的应用结构如下所示:

./
    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发出请求。

是什么导致这种情况?

1 个答案:

答案 0 :(得分:2)

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

将端点名称传递给add_url_rule,如:

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

但对于这种设计模式,您应该使用Blueprints我认为。