一、Flask蓝图目录
我们之前写的Flask项目都是自己组织的目录结构,其实Flask官方有其推荐的目录结构,以下就是一个符合官方推荐的Flask小型应用的项目结构目录示例,如下:
如图,这就是我们建立好的一个目录结构,一层一层的看一下,首先是app目录,它就是我们的主应用程序目录了,其中有一个__init__.py文件,里面的内容如下:
app/init.py
from flask import Flask
from .views.acc import acc_bp
from .views.user import user_bp
def create_app():
my_app = Flask(__name__)
my_app.register_blueprint(acc_bp)
my_app.register_blueprint(user_bp)
return my_app
app/__init__.py
__init__.py
就是构建app的一个函数,并且将views中的蓝图注册进去了。
接下来看static目录,这个目录从字面意思就可以理解了,是我们的static静态文件存放目录。
然后就是templates目录,即模板存放目录。
views目录,主角终于登场了,这里存放的就是视图函数文件,也就是我们Blueprint
,每一个文件就是一个Blueprint,如下:
views/acc.py
from flask import Blueprint
acc_bp = Blueprint('acc', __name__)
@acc_bp.route("/acc")
def accfunc():
return "my_app.acc"
views/acc.py
views/user.py
from flask import Blueprint
user_bp = Blueprint('user', __name__)
@user_bp.route("/login")
def user_login():
return "my_app.user"
views/user.py
接下来就是关键性的一个文件manager.py,项目的启动文件,内容如下:
manager.py
from app import create_app
my_app = create_app()
if __name__ == '__main__':
my_app.run()
manager.py
创建API蓝图,定义路由规则:
""" rmon.views.urls
定义了所有 API 对应的 URL
"""
from flask import Blueprint
from rmon.views.index import IndexView
# 创建 API 蓝图
api = Blueprint('api', __name__)
# 蓝图的 add_url_rule 方法定义路由及其视图函数
# 第一个参数为路径,第二个参数为视图函数
# 自定义 as_view 的参数作为视图函数名
# 例如浏览器使用 GET 方法访问主页时,由 IndexView 类中的 get 方法处理请求
api.add_url_rule('/', view_func=IndexView.as_view('index'))
上面的代码中,我们使用了 Flask 的蓝图 Blueprint 定义了路由规则。对于蓝图 Blueprint 可以理解为 Flask 子应用。一个 Blueprint 可以有自己的 URL 路由规则,自己的静态文件目录等。在这里我们定义了一个名为 api 的蓝图,然后通过 api.add_url_rule
方法添加了 IndexView 视图控制器对应的路由 URL,也就是 /
。也就是说我们通过 GET HTTP 方法访问 URL /
时就会执行 IndexView 中对应的 get 方法。
还需要注意的是在 Flask 中我们可以通过 flask.url_for
方法生成某一个视图函数的对应的 URL,那么在这里怎么样通过 url_for 生成 IndexView 对应的 URL 呢?只需要执行 url_for('api.index')
就可以。其中 api.index 参数由两部分组