如何模块化URL处理功能?

时间:2012-06-15 09:04:12

标签: python python-2.7 flask pyramid webapp2

使用Flask,webapp2和Pyramid等Python Web应用程序框架,每个路由处理函数如何拥有自己的py文件?我不希望所有这些功能在一个文件结构中堆叠在一起。我该怎么做才能在Flask,webapp2和Pyramid中使用它?

谢谢。

2 个答案:

答案 0 :(得分:2)

在烧瓶和金字塔中(不知道webapp2,但可能相同),route-handling-function(让我们称之为视图)只是函数,它们注册到app注册表。


在烧瓶中,您可以将视图放在任何位置,只要您注册它:

app.py:

from flask import Flask
app = Flask(__name__)

view.py:

from app import app
@app.route("/")
def hello():
    return "Hello World!"

main.py:

from app import app
if __name__ == "__main__":
    app.run()

金字塔也是如此。我不会详细介绍。注册过程不同,但想法是一样的。但只要你注册它,它就在任何地方。注册视图有两种方法:

  • 使用add_view:第一个参数是函数的虚线路径。把它放在任何地方,并把正确的路径放在这里。
  • 使用scan:第一个参数是扫描以查找视图的包。只需确保所有视图都在包及其子包中,一切都会正常工作。

答案 1 :(得分:1)

如果Python期望在特定位置使用函数,那么您可以自己从其他文件中导入它们。

例如,如果Web框架从code.py导入函数:

def a():
    pass

def b():
    pass

def c():
    pass

然后您可以通过从其他地方导入函数来替换code.py

from mycode.somewhere import a, b
from mycode.some.other.place import c

就Web框架而言,您的code.py仍包含函数abc,但您的代码当然可以采用不同的方式进行组织