当前位置 : 主页 > 编程语言 > 其它开发 >

Flask蓝图

来源:互联网 收集:自由互联 发布时间:2022-07-14
Flask蓝图 概述:蓝图分为两种方式,按照功能划分,与按照结构划分。 1.小蓝图 说明:按照功能划分蓝图。 在视图函数中创建多个 py 文件,每个 py 文件中的视图函数都可以注册到蓝图
Flask蓝图

概述:蓝图分为两种方式,按照功能划分,与按照结构划分。

1.小蓝图

说明:按照功能划分蓝图。

在视图函数中创建多个 py 文件,每个 py 文件中的视图函数都可以注册到蓝图中;

目录结构如图所示:

image-20220713222802247

manage.py 为启动文件:

# -*- coding: utf-8 -*-
from pythonProject import create_app

app = create_app() # 调用文件创建 app

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

pythonProject /__init__.py文件是包的标志文件。通常说的导入一个包即为导入它的__init__.py文件;因此我们只需要在__init__.py中创建对应的 app 即可。

from flask import Flask
from .views.account import ac_blueprint

def create_app():
    app = Flask(__name__)
    app.register_blueprint(ac_blueprint,url_prefix = '/web')
    # /web 相当于路由分发的前置
    return app

在小蓝图内编写视图函数

# -*- coding: utf-8 -*-
from flask import Blueprint

ac_blueprint = Blueprint('ac',__name__)

# 将路由注册到蓝图内
@ac_blueprint.route('/f1')
def func():
    return "f1"

image-20220713222550313

2.大蓝图

说明:按照结构划分蓝图。

目录结构

补充:apps 有的时候也可能是与项目名称相同。

image-20220713230849014

# -*- coding: utf-8 -*-
from apps import create_app

app = create_app()

if __name__ == '__main__':
    app.run()# 启动文件

创建 app 函数,注册蓝图。

from flask import Flask
from .account import account
from .admin import admin

def create_app():
    app = Flask(__name__)
    app.config.from_object('config.settings') # 加载配置文件
    app.register_blueprint(account)# 注册蓝图
    app.register_blueprint(admin) # 注册蓝图
    return app

在每个项目中创建蓝图

# -*- coding: utf-8 -*-
from flask import Blueprint
admin = Blueprint("ad",__name__)

# -*- coding: utf-8 -*-
from flask import Blueprint
account = Blueprint("ac",__name__,template_folder='templates') 
# 创建蓝图,并指定相关的参数,更加具体的参数可以参考源码示例

from .views import user
# 注意需要写到蓝图对象下面,不然导入的时候蓝图对象不会被加载到内存

源码示例

image-20220713231835448

蓝图中视图函数的写法

# -*- coding: utf-8 -*-
from flask import render_template
from .. import account # 导入蓝图,因此需要在蓝图被创建后将视图模块导入。

@account.route('/login')
def login():
    return render_template('login.html')

相关 html 文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>内部登录</h1>
</body>
</html>

继续努力,终成大器。

网友评论