Flask:蓝图

1 蓝图

对程序进行目录结构划分,没有蓝图之前Flask是单文件,或者自己拆分成多个文件,进行分层

1.1 不使用蓝图,自己划分文件(不推荐,容易出现循环导入问题)

目录结构

run.py

from views import app

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

init.py

from flask import Flask

app = Flask(__name__)

from . import order
from . import user

user.py

from . import app


@app.route('/user')
def user():
    return 'user'

order.py

from . import app


@app.route('/order')
def order():
    return 'order'

1.2 蓝图的基本使用

目录结构:跟自己划分目录一样,只不过用蓝图对象替代了app对象,避免了循环导入问题,类似于app注册路由时分发到不同的蓝图对象

run.py

from views import app

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

init.py

from flask import Flask

app = Flask(__name__)

from . import order
from . import user

# 第一步:在app中注册蓝图,括号里是一个蓝图对象
# 第二步:在不同文件中注册路由时,使用蓝图对象注册,不再使用app对象注册,避免了循环导入问题
app.register_blueprint(user.us)
app.register_blueprint(order.ord)

user.py

from flask import Blueprint

us = Blueprint('user', __name__)   # 生成蓝图对象,传入name 和 import_name

@us.route('/user') # 注册路由使用蓝图对象替代app对象
def user():
    return 'user'

order.py

from flask import Blueprint

ord = Blueprint('order', __name__)

@ord.route('/order')
def order():
    return 'order'

 使用蓝图时需要注意的

1.3 使用蓝图之中小型系统

目录结构

run.py

from mid_flask import app   # 导入mid_flask包下的__init__中的app

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

 init.py

from flask import Flask

# 配置template和静态文件路径,并且开放静态文件访问路径
app = Flask(__name__, template_folder='templates', static_folder='statics', static_url_path='/static')

from .views.account import account
from .views.blog import blog
from .views.user import user

app.register_blueprint(account)
app.register_blueprint(blog)
app.register_blueprint(user)

account.py(在各个模块中用蓝图对象注册路由,写视图函数)

from flask import Blueprint, request, render_template

account = Blueprint('account', __name__)

# /login.html用的伪静态路径
@account.route('/login.html', methods=['GET', 'POST'])
def login():
    return render_template('login.html')

1.4 使用蓝图之大型系统

目录结构:把app拆分开(多app项目),各自用各自的静态文件和模板文件

run.py

from pro_flask import app

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

 init.py

from flask import Flask
from .admin import admin
from .web import web

app = Flask(__name__)
app.debug = True

app.register_blueprint(admin, url_prefix='/admin')  # admin这个蓝图对象的url加了前缀,访问http://127.0.0.1:5000/admin/...
app.register_blueprint(web)

# admin和web蓝图对象写在app包下的__init__文件中

inti.py(admin应用下的init文件) 

from flask import Blueprint

# 在admin蓝图里,指定它的静态路径和模板文件路径
admin = Blueprint('admin', __name__, template_folder='templates', static_folder='static')

# 导入视图文件,总的__init__在引入时才能找到视图函数
from . import views

views.py(admin应用下的view)

from . import admin    # 导入当前app的蓝图

@admin.route('/index')
def index():
    return 'Admin Index'

 

posted @ 2022-10-08 00:08  不会钓鱼的猫  阅读(78)  评论(0编辑  收藏  举报