其他分享
首页 > 其他分享> > 如何在 Flask 中使用蓝图

如何在 Flask 中使用蓝图

作者:互联网

如何在 Flask 中使用蓝图

在本文中,您将学习如何使用 Flask 蓝图来组织您的 Flask 应用程序。

Flask 是一个简单易用的 Python 微框架,可以帮助您构建可扩展且安全的 Web 应用程序。

有时你会发现开发人员将他们所有的逻辑都转储到一个名为 应用程序.py .你会发现很多教程都遵循相同的模式。但对于大型应用程序来说,这不是一个好习惯。

通过这样做,您显然违反了单一职责原则,即您的应用程序的每个部分都应该只处理一项职责。

如果您使用过 Django,您可能会发现您的项目分为不同的模块。在 Flask 中,您也可以使用蓝图来组织应用程序,蓝图是 Flask 中的一个内置概念,类似于 Python 模块。

Flask 应用程序是什么样的?

如果您按照 Flask 文档创建一个最小的应用程序,您的项目结构将如下所示:

 /myapp  
 ├── /模板  
 ├── /静态  
 └── app.py

文件夹看起来不是很干净吗?你所拥有的只是一个 应用程序.py 包含应用程序所有逻辑的文件,一个 模板 用于存储 HTML 文件的文件夹,以及 静止的 文件夹来存储你的静态文件。

让我们看一下 app.py 文件:

 从烧瓶进口烧瓶 app = Flask(__name__) # 这里有一些模型 # 与核心功能相关的路由 # 与个人资料页面相关的路线 # 与产品页面相关的路线 # 与博客页面相关的路由 # 与管理页面相关的路由 如果 __name__ == '__main__':  
 应用程序运行(调试=真)

看起来是不是很乱(想象一下你已经构建了一个大型应用程序)?你的所有模型和不同的路线都在同一个文件中到处散布。

蓝图如何解决问题?

现在,这就是 Flask 蓝图发挥作用的地方。蓝图通过将逻辑组织到子目录中来帮助您构建应用程序。除此之外,您可以将模板和静态文件与逻辑一起存储在同一子目录中。

因此,现在有了蓝图,您的同一个应用程序将如下所示:

 /蓝图教程  
 ├── /myapp_with_blueprints  
 │ ├── __init__.py  
 │ ├── /admin  
 │ │ ├── /模板  
 │ │ ├── /静态  
 │ │ └── routes.py  
 │ ├── /核心  
 │ │ ├── /模板  
 │ │ ├── /静态  
 │ │ └── routes.py  
 │ ├── /产品  
 │ │ ├── /模板  
 │ │ ├── /静态  
 │ │ └── routes.py  
 │ └── /profile  
 | ├── /模板  
 | ├── /静态  
 | └── routes.py  
 ├── app.py  
 ├── /静态  
 └── /模板

现在你可以看到你有一个清晰的关注点分离。与 admin 相关的逻辑位于 行政 文件夹,与产品相关的逻辑位于 产品 文件夹等。

此外,我们还在需要它们的子目录中分离了模板和静态文件,以便在进入不需要它们的页面时不会加载不相关的文件。

如何使用蓝图

现在您已了解蓝图解决了哪些问题,让我们看看如何在我们的应用程序中使用蓝图。

如何定义蓝图

让我们为内部的管理功能定义我们的第一个蓝图 管理员/路由.py 文件:

 从烧瓶导入蓝图 # 定义蓝图  
 admin_bp = 蓝图(  
 'admin_bp',__name__,  
 template_folder='模板',  
 静态文件夹='静态'  
 )

由于 Blueprint 是 Fl​​ask 内置的概念,您可以从 Flask 库中导入它。在创建对象时 蓝图 类,第一个参数是您要为蓝图指定的名称。此名称稍后将用于内部路由(我们将在下面看到)。

第二个参数是蓝图包的名称,一般 __姓名__ .这有助于定位 根路径 为蓝图。

传递的第三个和第四个参数是可选的 关键字参数 .通过定义 模板文件夹 文件夹和 静态文件夹 参数,您指定您将使用特定于蓝图的模板和静态文件。

如何使用蓝图定义路线

现在您已经为管理员相关功能创建了蓝图,您可以在为管理员创建路由时使用它。

 从烧瓶导入蓝图 # 定义蓝图  
 admin_bp = 蓝图(  
 'admin_bp',__name__,  
 template_folder='模板',  
 静态文件夹='静态'  
 )[ @admin_bp](https://twitter.com/admin_bp) .route('/admin') # 关注这里  
 def admin_home():  
 返回“您好管理员!”

在上面的代码片段中,关注定义路由的行。而不是通常的[ @应用程序](https://twitter.com/app) 。路线('…') ,我们使用了[ @admin_bp](https://twitter.com/admin_bp) 。路线('…') .这就是您将路由绑定到特定蓝图的方式。

如何注册您的蓝图

现在您有一个蓝图和一个注册到它的路线。但是,你的应用会自动知道这个蓝图吗?

所以,让我们去做吧。在里面 __init__.py 文件,我们将创建一个 Flask 应用程序并在那里注册我们的蓝图:

 从烧瓶进口烧瓶 app = Flask(__name__) 从 .admin 导入路由 # 注册蓝图  
 app.register_blueprint(admin.admin_bp)

要注册蓝图,我们使用 注册蓝图() 方法并传递蓝图的名称。此外,您可以将其他参数传递给该方法以进行更多自定义。其中之一是 url_prefix 您可能需要。

 app.register_blueprint(admin.admin_bp, url_prefix='/admin')

同样,如果您有更多蓝图,您可以注册其余的蓝图。

带有蓝图的模板路由

如果没有蓝图,为了在模板中创建链接,您将使用类似于以下内容的内容:

 <a href="{{ url_for('admin_home') }}">我的链接</a>

但是有了蓝图,现在您可以将链接定义为:

 <a href="{{ url_for('admin_bp.admin_home') }}">我的链接</a>

admin_bp 我们在上面使用的是我们在创建对象时为内部路由的蓝图赋予的名称。

要打印当前页面所属的 Jinja2 模板的蓝图名称,可以使用 {{request.blueprint}} .

注意:要使用特定于蓝图的资源,您可以使用 烧瓶资产 图书馆。

包起来

Blueprint 是组织和构建 Flask 应用程序的绝佳工具。

在本文中,您了解了蓝图必须提供的内容以及如何在 Flask 应用程序中使用它们。

谢谢阅读!

你可以关注我 推特 .

更多内容在 ** 纯英语.io** .注册我们的 ** 免费每周通讯** .跟着我们 ** 推特** , ** 领英** , ** YouTube** , 和 ** 不和谐** .

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/17436/10170600

标签:__,Flask,蓝图,应用程序,如何,admin,模板
来源: https://www.cnblogs.com/amboke/p/16660190.html