ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Flask】(八)蓝图

2021-02-02 20:33:12  阅读:141  来源: 互联网

标签:__ blue name Flask app 蓝图 user


蓝图单文件使用

作用:模块化开发

使用流程:

  • 创建蓝图对象
  • 使用蓝图装饰视图函数
  • 将蓝图注册到app中

使用蓝图之后,我们就可以将视图函数从主函数中剥离出来,全部放到一个蓝图文件中。

比如,我们先写一个蓝图文件:

from flask import Blueprint

blue = Blueprint("my_blue", __name__)
# 使用蓝图装饰视图函数
@blue.route('/')
def index():
    return 'index'

@blue.route('/add')
def add():
    return 'add'

@blue.route('/delete')
def delete():
    return 'delete'

然后是主函数文件:

from flask import Flask, Blueprint
from demo07_blue import blue
app = Flask(__name__)
app.register_blueprint(blue)

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

同样,我们也可以新建一个user_blue的用户蓝图文件,创建user_blue蓝图对象,专门存放一些用户相关操作的视图函数,最后在主函数文件中注册。

以包的形式使用蓝图

这种方式更加灵活,每个蓝图都可以有自己的模板文件、静态文件和配置文件等。

首先我们新建一个package叫做user,专门用来处理用户相关的一些操作。创建好后,,里面会自动生成一个__init__.py文件,这个文件负责user模块的初始化。

在__init__.py中添加内容:

from flask import Blueprint
user_blue = Blueprint("user_blue", __name__)
from user import views  # 这句很重要,不然直接返回没有视图函数

然后在user包中新建一个views.py,专门用来存放user的视图函数:

from user import user_blue

@user_blue.route('/')
def index():
    return 'index'

最后在入口文件中注册即可:

from flask import Flask
from user import user_blue
app = Flask(__name__)
app.register_blueprint(user_blue)

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

循环导包

这是一个典型的错误,编译器报错常显示

ImportError: cannot import name '***'

比如上面的代码中如果出现这样的改动就会导致循环导包:
在这里插入图片描述

在蓝图中添加静态和模板文件夹

user_blue = Blueprint("user_blue", __name__, static_folder='static', url_prefix='/user')

static_folder表示静态文件夹的名字,它的位置在user包中。为了防止与Flask类的static目录混淆,这里加一个url前缀/user,在查询时使用http://127.0.0.1:5000/user/static/img.png即可访问到对应static文件中的静态资源。

同理,也可以创建user包底下的模板文件夹:

user_blue = Blueprint("user_blue", __name__, static_folder='static', url_prefix='/user', template_folder='templates')

这里要注意的是如果app中也设置了templates文件夹,并且有和user中同名的,那么用render_template(’’)渲染时优先渲染app里面的。不过我们一般都是给蓝图设置templates文件夹,app里面并不设置。

标签:__,blue,name,Flask,app,蓝图,user
来源: https://blog.csdn.net/m0_54797890/article/details/113564242

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有