Python Flask学习知识点(七)

简介: timg (11).jpg静态文件访问原理app文件夹下新建文件夹static,放入一张图片demo.jpg,然后访问服务器启动默认地址127.0.0.1:81/static/demo.jpg就可以访问到这张图片。
img_963e5d3b32625fd878b90970668cc08e.jpe
timg (11).jpg

静态文件访问原理

app文件夹下新建文件夹static,放入一张图片demo.jpg,然后访问服务器启动默认地址127.0.0.1:81/static/demo.jpg就可以访问到这张图片。

问:为什么Flask可以在任何代码不编写的情况下自动读取到static目录下的图片文件?
答:因为Flask对于静态文件是有默认值设置的,默认情况下,Flask认为静态文件夹的名字就叫ststic,并且位于应用程序的根目录下的,也就是app文件夹目录下。


img_217490b95be0988f1077594627c9af9c.png
image.png

问:为什么应用程序根目录是app目录而不是app上边的flaskDemo目录?
答:因为在实例化Flask核心对象是传入了一个参数,如下代码:

def create_app():
    app = Flask(__name__)
    app.config.from_object('app.secure')
    app.config.from_object('app.setting')

    register_blueprint(app)
    db.init_app(app)
    db.create_all(app=app)
    return app

__name__这个参数决定了我们应用程序的根目录是app目录。

如果不想使用默认的static作为静态文件存储路径,可以通过更改配置来访问,

app = Flask(__name__, static_folder='web/img')

更改成为这个路径,就要这样访问:127.0.0.1:81/img/demo.jpg,
还可以这么改:

app = Flask(__name__, static_folder='web/img', static_path='')

但是我们一般还是使用Flask默认设置即可,如果确实有需求,具体使用详情请查阅官方文档。

静态文件放到蓝图中

之前说过,Flask里有两个层级:

  1. Flask核心对象:应用程序级别
  2. 蓝图

对于静态文件,也有两个级别:

  1. 应用程序static
  2. 蓝图static

如果你认为你的静态文件是针对你的蓝图的话,那么你其实是可以把静态文件注册到蓝图上边,而不是注册到应用程序上边。


img_f1ed9d9db6de1211aef205eda87fcc61.png
image.png

蓝图的相关方法其实几乎就是复制了Flask核心对象的api,基本参数都是一致的。

蓝图注册静态文件夹:

from flask import Blueprint

# 蓝图
web = Blueprint("web", __name__, static_folder='', static_url_path='')

模板文件

模板就是html,但是和普通html不同,模板是没有数据的,它等待填充数据。
app文件夹下新建文件夹templates,新建html文件:test.html:


img_c1c40a82d8a09ccc759c549a8fa55dfa.png
image.png

同上边提到的static文件夹一样,我们可以自定义templates文件夹的位置,通过更改template_folder=参数来自定义templates文件夹的位置,例如,把templates文件夹移动到web文件夹下后需改动:
两种更改方法:

  1. Flask核心对象上更改:app = Flask(__name__, template_folder='web/templates')
  2. 在蓝图对象上更改:web = Blueprint("web", __name__, template_folder='templates')

现在要把视图函数中返回的数据填充到模板test.html中,使用Flask内置的方法:render_template()

from flask import render_template

@web.route('/test')
def test():
    r = {
        "name": "allen",
        'age': 24
    }

    r1 = {
        "name": "zhao",
        "age": 12
    }
    return render_template('test.html', data=r, data1=r1)

模板语言 Jinja2

如何在模板中组织、解析相关数据

编辑test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>demo</h1>
{{data.age}}
{{data1.age}}
</body>
</html>

运行代码,浏览器输入127.0.0.1:8000/test


img_6a437e4c28da26ec8ff9833496137cf9.png
image.png

可以看到,之前我们写在视图函数中的数据已经展示到页面了。

Flask为了让我们很好的在模板解析和展示数据,它引入了一个模板引擎,叫做Jinja2。

Jinja2有自己的语法,例如注释代码:{#hello word#},这里就把hello word注释掉了。

我们的pycharm默认是不会像写python代码一样智能提示Jinja2的语法,但是,更改设置即可:


img_ae52eade4253aad27443fe5a084b29c3.png
image.png

Jinja2也叫做模板语言,

Flask官方推荐我们使用Jinja2,大家也可以自己使用其他的模板语言。

目录
相关文章
|
17天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
1月前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
26天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
16天前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
1月前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
1月前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。
|
1月前
|
程序员 Python
Python学习的自我理解和想法(3)
这是学习Python第三天的内容总结,主要围绕字符串操作展开,包括字符串的提取、分割、合并、替换、判断、编码及格式化输出等,通过B站黑马程序员课程跟随老师实践,非原创代码。
|
1月前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
1月前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
1月前
|
存储 索引 Python
Python学习的自我理解和想法(4)
今天是学习Python的第四天,主要学习了列表。列表是一种可变序列类型,可以存储任意类型的元素,支持索引和切片操作,并且有丰富的内置方法。主要内容包括列表的入门、关键要点、遍历、合并、判断元素是否存在、切片、添加和删除元素等。通过这些知识点,可以更好地理解和应用列表这一强大的数据结构。