我是靠谱客的博主 舒心大神,最近开发中收集的这篇文章主要介绍flask 用蓝图(BluePrint)组织项目结构,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简介:
Flask中的蓝图旨在针对这些情况:

•把一个应用分解成一系列的蓝图。对于大型的应用是理想化的;一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图。
•以一个 URL 前缀和/或子域在一个应用上注册蓝图。 URL 前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)。
•在一个应用中用不同的 URL 规则多次注册一个蓝图。
•通过蓝图提供模板过滤器、静态文件、模板和其它功能。一个蓝图不一定要实现应用或视图函数。
•初始化一个 Flask 扩展时,在这些情况中注册蓝图。

蓝图功能,就好像把一个flask项目分成了N个flask项目。用来分离route路由表。基础flask教程中,route都写在main文件中。当项目够大的时候,几百个路由,怎么写?当项目是多人团队开发的时候怎么写?当新版本上线的时候,老版本怎么兼容?

使用蓝图,就能解决上面的问题。

大概就是把@app.route()给分离成多个文件来写,方便你找到需要修改的地方。方便团队协作时,个人写个人的功能模块,写在自己的文件里。新版本和旧版本可以同时在线,通过不同的URL来调用。

一:构建蓝图
现在有两种流行的方式来分割route,来使用蓝图。

1.根据类型来分割
见过使用 api core models

分为API接口,核心代码,模型

2.根据应用来分割
我倾向于写这样的

分割为 app01 app02 app03……

见过的一般分为 auth admin main news

二:建立蓝图目录结构
从上篇的空白flask项目中继续建立目录和文件。

演示设计,把所有的蓝图分割,都按应用放在app目录下,分割为main,app01,app02.

在这里插入图片描述
三:建立蓝图views
初级flask教程中,只进行了app.route的路由注册。

这里开始使用蓝点注册路由。

main.views

from flask import Blueprint

main=Blueprint('main',__name__)

@main.route('/')
def show():
    return 'main.hello'

app01.views

from flask import Blueprint

app01=Blueprint('app01',__name__)

@app01.route('/')
def show():
    return 'app01.hello'

app02.views

from flask import Blueprint

app02=Blueprint('app02',__name__)

@app02.route('/')
def show():
    return 'app02.hello'

大家会发现,我把路由都注册到了/下面。

不过它们是在不同的蓝点下面,也不冲突。

四:注册蓝图
修改main.py

把刚才注册的蓝点路由,注册到程序的主入口文件中

from flask import Flask
from app.main.views import *
from app.app01.views import *
from app.app02.views import *

app=Flask(__name__)
app.register_blueprint(main)
app.register_blueprint(main,url_prefix='/index')
app.register_blueprint(app01,url_prefix='/app01')
app.register_blueprint(app02,url_prefix='/app02')
app.register_blueprint(app01,url_prefix='/app03')
app.register_blueprint(app02,url_prefix='/app04')
app.register_blueprint(app02)

if __name__=='__main__': 
	app.run()

大家会注意到,我注册了两次main,区别是url_prefix。可以理解为挂载点不同。

结合测试,和大家继续讲这些东西是怎么用的。

五:本机测试
本机测试:

运行以后,应该会提示你访问:http://127.0.0.1:5000

![在这里插入代码片](https://img-blog.csdnimg.cn/20190526161745561.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lQTF9aTUw=,size_16,color_FFFFFF,t_70)

我注册了两次main,一次注册是没有给挂载点的,一次是有挂载点的。那么这一个路由,可以由默认位置访问,也可以由挂载点访问。

不同的蓝点,使用不同的挂载点挂载后,蓝点内的挂载点不冲突。

app.register_blueprint(main)
app.register_blueprint(app02,url_prefix='/app02')
app.register_blueprint(app02)

这三行看着貌似冲突了。main和app02都进行了默认挂载,无挂载点挂载,且挂载内部,都是挂载在‘/’下,其实并不冲突,flask并不校验这些,只是在路由里面寻找匹配的第一个路由,并返回给客户端,所以访问http://127.0.0.1:5000,返回main.hello。

而app02挂载两次匹配路由的时候,只有http://127.0.0.1:5000/app02,才是第一个匹配的路由,才可以返回app02.hello。

app.register_blueprint(app01,url_prefix='/app01')
app.register_blueprint(app01,url_prefix='/app03')

这两行看着也是冲突的重复挂载,这就是多次注册一个蓝图,访问http://127.0.0.1:5000/app01 http://127.0.0.1:5000/app03 都是访问同一个蓝图,即app01.views–@app01.route(’/’)

可以多做点测试,更深入的理解一下蓝点的路由。

最后

以上就是舒心大神为你收集整理的flask 用蓝图(BluePrint)组织项目结构的全部内容,希望文章能够帮你解决flask 用蓝图(BluePrint)组织项目结构所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部