Python Flask服务器模块,模板继承和模板变量

liftword2周前 (04-28)技术文章2

模板和继承

观察下方两个页面,有什么区别呢?

按照之前学习的知识,左边的网页直接 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>

相关文章

三十二、Python类的继承与多继承详解

继承是面向对象的三大特征之一,也是实现软件复用的重要途径。Python中的继承机制是多继承机制,即一个子类可以同时有多个父类。1.继承的语法Python子类继承父类的语法是在定义子类时,将多个父类放在...

Python | 多继承(python多继承父类参数问题)

在Python中,类可以继承自多个类。这被称为多继承。多继承是一种非常强大的概念,它允许我们将多个类的功能组合到一个类中。在本文中,我们将使用一个简单的示例来说明多继承的概念。假设我们正在编写一个图形...

python多继承的3C算法是什么?怎么用?

有很多地方都说python多继承的继承顺序,是按照深度遍历的方式,其实python多继承顺序的算法,不是严格意义上的深度遍历,而是基于深度遍历基础上优化出一种叫3C算法python多继承的深度遍历cl...

python之多态、继承、重写篇(python多态的作用特点)

# -*- coding: UTF-8 -*- class Animal: def run(self): print("动物会跑。。") def sl...

Python 中的继承和多态(python多继承的顺序)

Python 中的继承是什么?Python 中的继承是一个特性,允许一个类(子类)使用另一个类(父类)的属性和方法。这有助于我们重用代码并避免重复。思考一下亲子关系:孩子继承了父母的某些特征,但也可以...

python继承与多态-多继承二义性和弊端

在Python中,多继承是一种同时从多个父类继承属性和方法的机制。然而,多继承也可能导致二义性和带来一些弊端。下面我们来详细说明这些问题。二义性(Ambiguity)当一个类从多个父类继承了相同的方法...