Flask之蓝图


蓝图

  • 蓝图的作用就是让Flask项目更加模块化,结构更加清晰
  • 为了更好的管理项目让项目达到分层解耦而产生的。
  • 可以将相同模块的视图函数放在同一个蓝图下,同一个文件中,方便管理。

蓝图基本语法

  • 在蓝图文件中导入Blueprint

from flask import Blueprint
user_bp = Blueprint('user',__name__)

  • 在主启动文件中注册蓝图:

from flask import Flask
from blueprints.user import user_bp

app = Flask(__name__)

app.register_blueprint(user_bp)


URL前缀

  • 要某个蓝图下的所有url都有一个url前缀,那么可以在定义蓝图的时候,指定url_prefix参数。
  • 在定义url_prefix的时候,要注意后面的斜杠,如果给了,那么以后在定义url与视图函数的时候,就不要再在url前面加斜杠了。

user_bp = Blueprint('user',__name__,url_prefix='/user')

#个人中心的 url与视图函数
@user_bp.route('/profile/')
def profile():
    return '个人中心页面'

#个人设置中心的 url与视图函数
@user_bp.route('/settings/')
def settings():
    return '个人设置页面'
    

蓝图中模版文件寻找规则

  • 若templates目录下,有一个与蓝图文件指定的目录下同名的一个 html文件时,优先走templates目录下的文件

  • templates文件夹
    如果项目中的templates文件夹中有相应的模版文件,就直接使用了。


news_bp =  Blueprint('news',__name__,url_prefix='/news')


  • 自动义文件夹
    如果项目中的templates文件夹中没有相应的模版文件,那么就到在定义蓝图的时候指定的路径中寻找。并且蓝图中指定的路径可以为相对路径,相对的是当前这个蓝图文件所在的目录。

news_bp =  Blueprint('news',__name__,url_prefix='/news',template_folder='news_page')


蓝图中静态文件寻找规则

  • 正常情况下:在模版文件中,加载静态文件,如果使用url_for('static'),那么就只会在app指定的静态文件夹目录下查找静态文件。

<link rel="stylesheet" 
	href="{{ url_for('static',filename='news_list.css') }}">


  • 自定义:如果在加载静态文件的时候,url_for指定的蓝图的名字,那么就会到这个蓝图指定的static_folder下查找静态文件。

from flask import  Blueprint,render_template,url_for

news_bp=Blueprint('news',__name__,
					url_prefix='/news',
					template_folder='news_page',
					static_folder='news_page_static')
	

<link rel="stylesheet" 
	href="{{ url_for('news.static',filename='news_list.css') }}">


反转蓝图url

  • 如果使用蓝图,以后想要反转蓝图中的视图函数为url,那么就应该在使用url_for的时候指定这个蓝图名字。

  • app类中、模版中、同一个蓝图类中都是如此。

  • 否则就找不到这个endpoint

  • 如:app类 blueprint_demo.py中:


#如下写法:才找得到 url_for('蓝图名称.方法名')
print(url_for('news.news_list'))
#得到:/news/list/

  • 如:模版/templates/index.html中:

<a href="{{ url_for('news.news_list')}}">新闻列表 OK写法</a>

  • 如:同一个蓝图类/blueprints/news.py中:

from flask import Blueprint,render_template,url_for

news_bp=Blueprint('news',__name__,
	url_prefix='/news',
	template_folder='news_page',
	static_folder='news_page_static')

@news_bp.route('/list/')
def news_list():
     print(url_for('news.news_detail')) 
     #得到:/news/detail/
     return render_template('news_list.html')

@news_bp.route('/detail/')
def news_detail():
    return '新闻详情页面'
    

蓝图实现子域名

  • ip地址不能有子域名。

  • localhost也不能有子域名。

  • 在创建蓝图对象的时候,需要传递一个subdomain参数,来指定这个子域名的前缀。
    例如:cms_bp= Blueprint('cms',__name__,subdomain='test')

  • 需要在主app文件中,需要配置app.configSERVER_NAME参数。
    例如: app.config['SERVER_NAME']='wukong.com:5000'

  • C:\Windows\System32\drivers\etc下,找到hosts文件,然后添加域名与本机的映射。
    域名和子域名都需要做映射。
    例如:127.0.0.1 wukong.com; 127.0.0.1 test.wukong.com


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值