2013-04-12 57 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我想。