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天前
|
缓存 Java 索引
[Python]知识点
本文主要介绍了Python的一些高级知识点和使用细节,包括pip的使用、内置函数、列表、元组、字典、集合、变量、Lambda表达式、面向对象编程、异常处理、模块及标准库等。文章适合有一定Python基础的读者,重点在于深入理解和掌握Python的高级特性。文中还提供了大量示例代码,帮助读者更好地理解和应用这些知识点。
20 1
[Python]知识点
|
1月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
12天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
41 2
|
1月前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
21天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
25 2
|
23天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
28 1
|
23天前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
构建RESTful APIs:使用Python和Flask
27 1
|
30天前
|
调度 Python
python知识点100篇系列(20)-python协程与异步编程asyncio
【10月更文挑战第8天】协程(Coroutine)是一种用户态内的上下文切换技术,通过单线程实现代码块间的切换执行。Python中实现协程的方法包括yield、asyncio模块及async/await关键字。其中,async/await结合asyncio模块可更便捷地编写和管理协程,支持异步IO操作,提高程序并发性能。协程函数、协程对象、Task对象等是其核心概念。
|
27天前
|
Python Windows
python知识点100篇系列(24)- 简单强大的日志记录器loguru
【10月更文挑战第11天】Loguru 是一个功能强大的日志记录库,支持日志滚动、压缩、定时删除、高亮和告警等功能。安装简单,使用方便,可通过 `pip install loguru` 快速安装。支持将日志输出到终端或文件,并提供丰富的配置选项,如按时间或大小滚动日志、压缩日志文件等。还支持与邮件通知模块结合,实现邮件告警功能。
python知识点100篇系列(24)- 简单强大的日志记录器loguru
|
28天前
|
自然语言处理 Python Windows
python知识点100篇系列(23)- 使用stylecloud生成词云
【10月更文挑战第10天】`stylecloud` 是 `wordcloud` 的优化版,支持使用 Font Awesome 图标自定义词云形状,操作更简便。本文介绍如何安装 `jieba` 和 `stylecloud` 库,并使用它们生成中文词云。通过 `jieba` 进行分词,再利用 `stylecloud` 的 `gen_stylecloud` 方法生成具有特定形状和颜色的词云图像。
python知识点100篇系列(23)- 使用stylecloud生成词云