Flask蓝本与子域名

本文介绍了如何在Flask中使用蓝本来组织大型项目,详细讲解了蓝本的创建、模板文件夹设置及注册过程。此外,还探讨了如何实现子域名功能,包括蓝图的url_prefix配置、SERVER_NAME设置以及子域名的host文件解析。通过这些方法,可以为不同的应用部分分配独立的URL路径或子域名。
摘要由CSDN通过智能技术生成

1.蓝本

之前我们写的url和视图函数都是处在同一个文件,如果项目比较大的话,这显然不是一个合理的结构,而蓝图可以优雅的帮我们实现这种需求。

蓝本文件需要存储到一个python包中,然后再将蓝本从包中导入并注册进入Flask框架中来运行。python包不同于普通文件夹,其中含有一个__int__.py文件。

下面我们建立一个图书蓝本。首先,建立一个名为blueprint的python包,并新建一个book.py文件,book.py文件代码如下,

from flask import Blueprint, render_template  # 导入相关库

book_bp = Blueprint('book', __name__, url_prefix='/book', template_folder='../book_templates')
# 实例化蓝图。第一个参数为蓝图名称(可自定义名称);第二个参数必填为__name__;url_prefix为路由前缀,我们这里设置为“/book”,index视图函数的路由地址就会变为“/book/”;template_folder为该蓝图指定的模板文件夹,当我们使用render_template()引用模板文件时,如果templates文件夹中没有找到模板,则会去该蓝图指定的模板文件夹中寻找模板文件


@book_bp.route('/')
def index():
    return render_template('book_index.html')

因为,我们指定了蓝图的模板文件夹,因此我们需要创建模板文件夹book_templates,用来存储蓝图的相关模板,便于管理。在book_templates文件夹中创建book_index.html文件,代码如下,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书首页</title>
</head>
<body>
<h3>图书首页</h3>
</body>
</html>

蓝本文件创建好之后,需要我们初始化蓝图,打开blueprint文件夹中的__init__.py文件,输入下列代码,

from .book import book_bp  # 导入蓝图

最后打开app.py实例文件,注册蓝图,代码如下,

from flask import Flask
from blueprint import book_bp  # 导入蓝图

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


app.register_blueprint(book_bp)  # 注册蓝图

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

如果我们需要使用url_for()函数获取蓝图中的url地址,应使用url_for(‘蓝图名.视图函数名’)的形式。该蓝图名是我们实例化蓝图时填写的第一个参数。

2.子域名

子域名在许多网站中都用到了,比如一个网站叫做“xxx.com”,那么我们可以定义一个子域名“cms.xxx.com”来作为cms管理系统的网址,子域名的实现一般也是通过蓝图来实现,上个例子中,我们创建蓝图的时候添加了一个url_prefix=’/book’作为url前缀,那样我们就可以通过/book来访问book下的url。但使用子域名则不需要。另外,还需要配置SERVER_NAME,比如app.config[‘SERVER_NAME’]=‘book.com:9000’。并且在注册蓝图的时候,还需要添加一个subdomain的参数,这个参数就是子域名的名称,先来看一下蓝图的实现:

from flask import Blueprint, render_template

book_bp = Blueprint('book', __name__, template_folder='../book_templates', subdomain='book')  # 添加subdomain参数


@book_bp.route('/')
def index():
    return render_template('book_index.html')

app.py文件代码如下,

from flask import Flask
from blueprint import book_bp

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


app.config['SERVER_NAME'] = 'book.com:5000'  # 配置SERVER_NAME
app.register_blueprint(book_bp)

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

写完以上两个文件后,还是不能正常的访问book.com:8000这个子域名,因为我们没有在host文件中添加域名解析。

host文件夹一般放在“C:\Windows\System32\drivers\etc”的位置,打开host文件并在最后添加一行127.0.0.1 book.com,就可以访问到了。另外,子域名不能在127.0.0.1上出现,也不能在localhost上出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值