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_templatebook_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_bpapp = 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上出现。

Flask蓝本与子域名相关推荐

  1. apache+tomcat 子目录映射成子域名

    细说Cache http://blog.csdn.net/yanghua_kobe/article/details/7093421 tomcat +java 项目中,一个项目中多个目录来维持不同的模块 ...

  2. DNS详解: A记录,子域名,CNAME别名,PTR,MX,TXT,SRV,TTL

    DNS DNS,Domain Name System或者Domain Name Service(域名系统或者域名服务).域名系统为Internet上的主机分配域名地址和IP地址.由于网络中的计算机都必 ...

  3. 什么是DNS,A记录,子域名,CNAME别名,MX记录,TXT记录,SRV 记录,TTL值

    DNS DNS,Domain Name System或者Domain Name Service(域名系统或者域名服务).域名系统为Internet上的主机分配域名地址和IP地址.由于网络中的计算机都必 ...

  4. JSFinder—从js文件中寻找敏感接口和子域名

    说在前面 在渗透测试及漏洞挖掘过程中,信息搜集是一个非常重要的步骤.而在网站的JS文件中,会存在各种对测试有帮助的内容. 比如:敏感接口,子域名等. 社区内的文章也有有些关于JS文件提取信息的片段,比 ...

  5. ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷 [转]

    一.什么是单点登录 单点登录就是在多个web应用程序中,实现统一登录方式,一但登录了某web应用程序,其它相关联的web应用程 序都无需再次登录,一个地方退出,所有相关联的web应用程序都退出. 二. ...

  6. 什么是A记录,子域名,CNAME别名,MX记录,TXT记录,SRV 记录,泛域名(泛解析),域名转向,域名绑定...

    什么是A记录,子域名,CNAME别名,MX记录,TXT记录,SRV 记录,泛域名(泛解析),域名转向,域名绑定 A记录 QUOTE: A (Address) 记录是用来指定主机名(或域名)对应的IP地 ...

  7. laravel的路由分组,中间件,命名空间,子域名,路由前缀(四)

    laravel的路由分组,就是把一些具有相同特征的路由进行分组,比如一些路由需要进行验证,一些路由有共同的前缀,一些路由有相同的控制器命名空间等. 这样把路由组合在一起,方便管理,维护性更好. Rou ...

  8. 百度收集子域名(2021.9.9)

    先说一下子域名是个啥玩意 比如qq.com这种一共两段,后面就一个.com .cn啥的,就是顶级域名.一般你要是想自己建个站,那需要买的域名就是这种 如果前面多点什么,像www.qq.com,q.pa ...

  9. tp5子域名index.php,tp5实现绑定子域名,并且根据子域名定义路由规则

    tp5实现绑定子域名,并且根据子域名定义路由规则 发布时间:2020-10-03 TP5的路由规则,可以绑定子域名到对应的模块,然后根据域名不同,使用不同的路由规则 use \think\Route; ...

  10. Godaddy 添加子域名

    添加指向一个 IP 地址的子域名 您现在已经理解了域名是什么,可以添加指向 IP 地址的非转址子域名. 如果您想要转址一个子域名,请参阅 . 登录您的 GoDaddy 账户. 单击域名旁边的管理. 如 ...

最新文章

  1. matlab 设置路径 Linux
  2. windbg-.process切换进程
  3. python las转txt
  4. 负载均衡集群ipvsadm命令及基本用法
  5. PostgreSQL · 特性介绍 · 全文搜索介绍
  6. python后端框架flask_Vue+Flask轻量级前端、后端框架,如何完美同步开发
  7. 机场精细化管理_精细化管理 | 西安咸阳国际机场关于深入推进精细化管理工作的指导意见(九)...
  8. linux信任本地jar包,jar包在linux本地运行成功, 但是jenkins构建失败
  9. 【Python学习笔记】复习sql主键外键索引
  10. Vue实战项目开发--首页开发
  11. 微信扫一扫二维码无法下载APP的解决方案
  12. iOS最简单的方式实现在线播放音频。
  13. mysql spider引擎安装_【转】MySQL之Spider存储引擎原理详解
  14. c语言.jpg图片转成数组_JPG图片怎么转换成PDF?可以试试这些转换方法!
  15. 事情永远都没有想象中那么好
  16. 克鲁格曼《微观经济学》第2版课后习题答案
  17. 怎么修复SONY索尼相机摄像机断电死机损坏的MP4视频文件
  18. 物联网智能硬件与嵌入式系统
  19. Vue源码--解读vue响应式原理
  20. ernel 3.10内核源码分析--KVM相关--虚拟机运行

热门文章

  1. 【技术文档】jeecg3.8-maven 开发环境搭建入门
  2. JEECG常见问题大全
  3. 易语言解决adb端口占用_Android ADB 端口占用问题解决方案
  4. 原生JS自定义6位数密码框
  5. 你真的了解width这个属性吗
  6. 机器学习 ❀ 数据投毒攻击(数据投毒 / 模型投毒) 隐私攻击(数据隐私 / 模型隐私)
  7. [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))...
  8. SpringBoot的test测试类报com.netflix.discovery.shared.transport.TransportException异常
  9. android三星s8底部菜单,【Android】三星Galaxy S8及S8+的屏幕适配
  10. 学计算机有那些方向,计算机专业的研究生研究方向有哪些