Python Flask服务器模块,模板继承和模板变量
模板和继承
观察下方两个页面,有什么区别呢?
按照之前学习的知识,左边的网页直接 return 文字就可以了,而右边的网页通过render_template方法,方法里的参数是一个网页,其实就是模板,那什么是模板呢?
模板其实是一个包含响应文本的文件,通过render_template方法来渲染。
我们再来观察下面两个网页:这两个网页有相同的头部和尾部,但是中间有不同的内容。
它们都有共同的代码,相似之处很多,为了不重复书写代码,我们引入模板继承。什么是模板继承呢?
比如说现在有三个网页,它们结构相同,分别是头部,内容和尾部,那么针对这样的情况,我们可以把一些公用的代码单独抽取出来放到一个父模板中,以后子模板直接继承就可以使用了。这样我们也不要书写很多重复性的代码,而且以后修改起来也会很方便。那模板继承该怎么用呢?
模板变量
我们知道,好多游戏开始的界面,都会有关于这款游戏的一些信息,比如说,版本号,文件大小,和更新时间等等。那这些内容是固定的吗?显然不是,比如游戏什么时候更新了,这个更新时间也会重置为更新时间。那这个具体是怎么做到的呢?
那如何把传递的模板变量在前端页面中显示出来呢?可以通过两对大括号来获取变量的值。
info = {'version': 'Ver.0.2.94.1', 'file_length': '1.95G', 'update_time': '2019-1-29'}
@app.route('/sdo', methods=['GET'])
def sdo():
# 在下方写你的代码:返回模板变量
return render_template('sdo.html', info=info)
app.run(host='127.0.0.1', port=8001)
<p>版本号:</p>
<p>文件大小:</p>
<p>更新时间:</p>
模板if
有的游戏开始界面,信息有时候会显示,有时候不会显示,这个通过模板变量怎么做?同一个位置,怎么根据需要显示不同的值呢?
# info = '【资料站开张福利】快来和熊猫菌一起玩吧~'
info = ''
@app.route('/yrzx')
def yrzx():
# 在下方写你的代码:返回模板变量
return render_template('yrzx.html', info = info)
app.run(host='127.0.0.1', port=8002)
暂无
十二星座和运势项目
Flask参数配置
- app = Flask(__name__):__name__是以当前所在的目录为根目录
- static_url_path静态文件访问路径,可以不传,默认为:/ + static_folder
- static_folder静态文件存储的文件夹,可以不传,默认为 static
- template_folder模板文件存储的文件夹,可以不传,默认为 templates
自定义配置信息
Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作。
读取
- app.config.get(name)
- app.config[name]
# 1.使用配置文件
app.config.from_pyfile('config.cfg')
# 2.使用对象配置参数
class DefaultConfig:
USERNAME = 'cat'
PASSWD = '123456'
class Config(DefaultConfig):
DEBUG = True
SCORE = 100
app.config.from_object(Config)
# 3.config直接操作字典对象
app.config['LEVEL'] = 1
run参数
# 启动服务器
# app.run()
# app.run(host='127.0.0.1', port=8000)
# app.run(host='192.168.92.143', port=8000)
app.run(host='0.0.0.0', port=8000)
总体思路
实现步骤
项目目录结构
展现十二星座主页面
# 导入 Flask 类
from flask import Flask, render_template, request
import tools
# 创建app应用
app = Flask(__name__)
# 开启debug模式
app.debug = True
# 创建视图函数,注册路由/star
@app.route('/star')
def star():
return render_template('star_home.html')
# 启动服务器
app.run(host='127.0.0.1', port=8002)
实现星座页面
- 数据获取:tools.py
- 这些星座数据获取到之后,要作为模版变量传递给模板文件star_home.html,并通过模板变量取值获取各个星座的图片地址。注意,取值的时候,要先从列表中取出字典,如果是第1个星座,那取的就是列表中下标为0的元素,第2个星座,那就是下标为1的元素,依次类推,取出字典后,再从字典中取出image的值。
app.py
@app.route('/star')
def star():
stars = tools.star_list()
return render_template('star_home.html', stars=stars)
star_home.html
<div class="star-item">
<a href="/star/fortune?star=pisces"><img src=""></a>
</div>
实现具体星座页面
- 点击某个星座之后,会跳转至/star/fortune,即某个星座的运势,因此需要一个视图函数接收,且获取star参数;
- 获取到具体星座信息,将star参数传递至tools.py中的方法,获取相关星座的运势数据;
- 将数据传递至前端,显示出来。
<div class="title">
<span class="photo">
<!--在下方写你的代码:获取星座图片photo -->
<img src="">
</span>
<span class="text">
<!--在下方写你的代码:星座名称name-->
<h4></h4>
<!--星座对应的日期date-->
<small></small>
<!--星座简介introduce-->
<p></p>
</span>
</div>