如何在Flask蓝图中使用装饰器和函数

时间:2015-08-01 23:52:35

标签: python flask

我有一个预先存在的Flask应用程序,它变得非常大,所以我决定切换到使用蓝图,按照Flask文档,来组织我的视图。

我的大多数视图都共享函数和装饰器。当我的所有观点都在一个文件中时,很容易访问它们。现在如何将所有视图组织成单独的文件,我不确定在何处查找函数和视图等信息。

我有以下文件结构:

run.py
website/
  __init__.py
  views/
    __init__.py
    admin.py
    home.py
    ...
  templates/
  static/

那么,我在哪里找到函数和装饰器以及如何访问它们?感谢。

1 个答案:

答案 0 :(得分:4)

两个或多个蓝图共享的任何代码都可以放在单独的模块中。例如,您可以拥有decorators.pyfunctions.py,它们可以位于views目录中:

run.py
website/
  __init__.py
  views/
    __init__.py
    decorators.py   # <-- common code
    functions.py    # <-- common code
    admin.py
    home.py
    ...
  templates/
  static/

然后在您的视图中,您可以按如下方式导入元素:

from .decorators import my_decorator

如果views以外的其他目录中的其他代码可能需要这些公共元素(例如Flask-WTF表单的forms目录),那么你可以放您的常用模块在website中升级一层。

run.py
website/
  __init__.py
  decorators.py   # <-- common code
  functions.py    # <-- common code
  views/
    __init__.py
    admin.py
    home.py
    ...
  templates/
  static/

使用此结构,您可以按如下方式从视图中导入:

from ..decorators import my_decorator

或:

from website.decorators import my_decorator

您可以在我的Flask Web开发手册中的Flasky应用程序中看到上述结构的示例。我将decorators.pyemail.pyexceptions.py作为所有蓝图都可以访问的常用模块。

如果常用模块的数量很大,您也可以将公共模块移到自己的包中:

run.py
website/
  __init__.py
  common/
    __init__.py
    decorators.py
    functions.py
  views/
    __init__.py
    admin.py
    home.py
    ...
  templates/
  static/

然后导入如下:

from ..common.decorators import my_decorator

或:

from website.common.decorators import my_decorator