Flask框架基础入门教程_ezflaskapp
pip install flask
Flask 快速入门小应用
学东西,得先知道我们用这个东西,能做出来一个什么东西。
一个最小的基于flask 的应用可能看上去像下面这个样子:
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello_world():return 'Hello World!'if __name__ == '__main__':app.run(0.0.0.0)
运行起来的效果就是这样的:

具体,这串代码什么意思?
首先,我们导入了Flask 这个类
然后编写了一个hello_world 函数,返回一个“Hello World”字符串
这也就是为啥我们能在网页上看到一串字符串的原因。
那么剩下的是什么?
@app.route('/')
这一串代码,官方解释为路由,其实就是告诉你当用户访问哪个路径的时候,调用下面装饰的这个函数。
所以上面那个小应用的代码,意思就是,当我访问根路径(‘/’)时执行hello_world函数。
当然,一个函数被多个路由装饰的时候,意味着你可以通过多个路径执行到该函数。
调用app的run方法即可启动服务,指定’0.0.0.0’,这会让操作系统监听所有公网 IP。
app.run(0.0.0.0)
再看看下面这个例子:
from flask import Flask
app = Flask(__name__)@app.route('/')
@app.route('/index')
def hello_world():return 'Hello World!'@app.route('/login')
def login():return 'Login Success!'if __name__ == '__main__':app.run(0.0.0.0)


EZ ~~
Flask 之模板的使用
经过上面的小应用,我们可以简单的利用flask生成一个小的网页,但是,这网页我想要加点样式怎么办?
一个最简单也是最懒的方法:就是让函数直接返回一串html代码
比如下面这个例子:
@app.route('/')
@app.route('/index')
def hello_world():def index():user = {'username': 'Cxiansheng'}return '''<html><head><title>Home Page - CSDN</title></head><body><h1>Hello, ''' + user['username'] + '''!</h1></body></html>'''

那么问题来了,我所有的函数都需要这串html代码怎么办?总不能所有的函数都返回一下这一段html代码吧。
这个时候,模板就派上用场了。
为了简化这些操作,Flask 配备了 Jinja2 模板引擎
我们把上面的html 代码装换成模板,命名为’index.html’:
<html><head><title>{{ title }} - CSDN</title></head><body><h1>Hello, {{ user.username }}!</h1></body>
</html>
然后就可以使用 render_template() 方法来渲染模板,传入必要的参数即可
@app.route('/')
@app.route('/index')
def hello_world():user = {'username': '这是模板生成的'}return render_template('index.html', title='Home', user=user)

偷懒成功,现在我们可以直接调用这个模板,而不需要手动返回html代码了。
突然一个念想:
那多个网页共有部分的html 代码可不可以也单独保存成一个模板?
例如CSDN的标题栏:

既然想偷懒,就继续偷懒下去吧。
我们可以利用模板继承的思想,去避免重复性的代码编写,例如:


我们利用上面的两个快速小应用,做一个标题栏,那么标题栏的html代码我们就可以做一个base.html用来给其他页面继承使用。
如何继承?
利用“{% extends ‘base.html’ %}”,即可继承base.html的代码
首先我们先看一下base.html的代码:
<html><head>{% if title %}<title>{{ title }} - CSDN</title>{% else %}<title>welcome - CSDN</title>{% endif %}</head><body><div>My Website:<a href="{{ url_for('index') }}">Home</a><a href="{{ url_for('login') }}">Login</a></div><hr>{% block content %}{% endblock %}</body>
</html>
其中 {% block content %}{% endblock %}这两个标识,即标记继承过来的代码所占的坑,也就是说,如果index.html 代码继承了base.html代码,那么index.html代码将会被放置在 {% block content %}{% endblock %}这两个标识之间。
下面看看index.html代码
{% extends 'base.html' %}
{% block content %}<h1>Hello {{ user.username }}!</h1>
{% endblock %}
相关文章:
Flask框架基础入门教程_ezflaskapp
pip install flaskFlask 快速入门小应用 学东西,得先知道我们用这个东西,能做出来一个什么东西。 一个最小的基于flask 的应用可能看上去像下面这个样子: from flask import Flask app Flask(__name__)app.route(/) def hello_world():ret…...
黑马点评 - 商铺类型缓存练习题(Redis List实现)
首先明确返回值是一个 List<ShopType> 类型那么我们修改此函数并在 TypeService 中声明 queryTypeList 方法,并在其实现类中实现此方法 GetMapping("list")public Result queryTypeList() {return typeService.queryTypeList();}实现此方法首先需要…...
AI学习指南Ollama篇-使用Ollama构建自己的私有化知识库
一、引言 (一)背景介绍 随着企业对数据隐私和效率的重视,私有化知识库的需求日益增长。私有化知识库不仅可以保护企业数据的安全性,还能提供高效的知识管理和问答系统,提升企业内部的工作效率和创新能力。 (二)Ollama和AnythingLLM的结合 Ollama和AnythingLLM的结合…...
洛谷P4057 [Code+#1] 晨跑
题目链接:P4057 [Code#1] 晨跑 - 洛谷 | 计算机科学教育新生态 题目难度:普及一 题目分析:这道题很明显是求最大公倍数,写题解是为了帮助自己复习。 下面用两种方法介绍如何求最大公倍数: 暴力破解 #include<bits…...
嵌入式经典面试题之操作系统(一)
文章目录 1 请你说说常用的Linux命令有哪些?2 在linux中如何创建一个新的目录?3 Linux中查看进程运行状态的指令、tar解压文件的参数。4 在linux中,文件权限如何修改?5 怎样以root权限运行某个程序?6 在linux里如何查看…...
讯飞绘镜(ai生成视频)技术浅析(四):图像生成
1. 技术架构概述 讯飞绘镜的图像生成技术可以分为以下几个核心模块: 文本理解与视觉元素提取:解析脚本中的场景描述,提取关键视觉元素(如人物、场景、物体等)。 视觉元素生成:根据文本描述生成具体的视觉元素(如人物、场景、物体等)。 分镜画面生成:将视觉元素组合成…...
搜索引擎快速收录:关键词布局的艺术
本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/21.html 搜索引擎快速收录中的关键词布局,是一项既精细又富有策略性的工作。以下是对关键词布局艺术的详细阐述: 一、关键词布局的重要性 关键词布局影响着后期页面…...
[Effective C++]条款53-55 杂项讨论
本文初发于 “天目中云的小站”,同步转载于此。’ 学到这里, Effective C至此也算是告一段落了, 还剩下一些杂七杂八的讨论, 我们将在本文逐一列举. 条款53 : 不要忽视编译器的警告 我们应严肃对待编译器发出的警告信息, 努力在你的编译器最高警告级别下争取无警告…...
FreeRTOS从入门到精通 第十五章(事件标志组)
参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、事件标志组简介 1、概述 (1)事件标志位是一个“位”,用来表示事件是否发生。 (2)事件标志组是一组事件标志位的集合&#x…...
5 长度和距离计算模块(length.rs)
这段代码定义了一个泛型结构体 Length<T, Unit>,用于表示一维长度,其中 T 表示长度的数值类型,而 Unit 是一个编译时检查单位一致性的占位符类型,不会用于运行时表示长度的值。这个设计允许开发者在编译阶段确保不同单位之间…...
使用Pygame制作“俄罗斯方块”游戏
1. 前言 俄罗斯方块(Tetris) 是一款由方块下落、行消除等核心规则构成的经典益智游戏: 每次从屏幕顶部出现一个随机的方块(由若干小方格组成),玩家可以左右移动或旋转该方块,让它合适地堆叠在…...
deepseek大模型本机部署
2024年1月20日晚,中国DeepSeek发布了最新推理模型DeepSeek-R1,引发广泛关注。这款模型不仅在性能上与OpenAI的GPT-4相媲美,更以开源和创新训练方法,为AI发展带来了新的可能性。 本文讲解如何在本地部署deepseek r1模型。deepseek官…...
常见“栈“相关题目
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 目录 1047.删除字符串中的所有相邻重复项 844.比较含退格的字符串 227.基本计算器 II 394.字符串解码 946.验证栈序列 104…...
QT实现有限元软件操作界面
本系列文章致力于实现“手搓有限元,干翻Ansys的目标”,基本框架为前端显示使用QT实现交互,后端计算采用Visual Studio C。 本篇将二维矩形截面梁单元(Rect_Beam2D2Node)组成的钢结构桥作为案例来展示软件功能。 也可以…...
软件工程经济学-日常作业+大作业
目录 一、作业1 作业内容 解答 二、作业2 作业内容 解答 三、作业3 作业内容 解答 四、大作业 作业内容 解答 1.建立层次结构模型 (1)目标层 (2)准则层 (3)方案层 2.构造判断矩阵 (1)准则层判断矩阵 (2)方案层判断矩阵 3.层次单排序及其一致性检验 代码 …...
深度学习篇---深度学习框架
文章目录 前言第一部分:框架简介1. PyTorch简介特点动态计算图易于上手强大的社区支持与Python的集成度高 核心组件 2. TensorFlow简介特点静态计算图跨平台强大的生态系统Keras集成 核心组件 3. PaddlePaddle简介特点易于使用高性能工业级应用丰富的预训练模型 核心…...
Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环。 目录 1. if 语句 2. switch语句 3. for语句 4. range语句 5. goto语句(不常用…...
Java中初步使用websocket(springBoot版本)
一、什么是websocket WebSocket是一种在Web应用程序中实现实时双向通信的协议。它为浏览器和服务器之间提供了一种持久连接,在一个连接上可以双向传输数据。相比传统的HTTP协议,WebSocket具有更低的延迟和更高的效率。 WebSocket使用了类似于握手的方式来…...
Day50:字典的合并
在 Python 中,字典是一个可变的数据类型,经常需要将多个字典合并成一个字典。合并字典的方式有多种,今天我们将学习几种常见的方法。 1. 使用 update() 方法合并字典 update() 方法可以用来将一个字典中的键值对添加到另一个字典中。如果目…...
14-8C++STL的queue容器
一、queue容器 (1)queue容器的简介 queue为队列容器,“先进先出”的容器 (2)queue对象的构造 queue<T>q; queue<int>que Int;//存放一个int的queue容器 queue<string>queString;//存放一个string的queue容器 (3)queue容器的push()与pop()方…...
C++范围for和auto关键字
这里写目录标题 一.范围for的介绍与使用模版:⽰例:打印数组2. 方法如下⽰例:打印数组二.auto 关键字一.范围for的介绍与使用 模版: for ( 类型 变量名 : 数组名 )语句 //多条语句需要加⼤括号 ⽰例:打印数组 #include <iostream> using namespace std; int main()…...
【B站保姆级视频教程:Jetson配置YOLOv11环境(四)cuda cudnn tensorrt配置】
Jetson配置YOLOv11环境(4)cuda cudnn tensorrt配置 文章目录 0. 简介1. cuda配置:添加cuda环境变量2. cudnn配置3. TensorRT Python环境配置3.1 系统自带Python环境中的TensorRT配置3.2 Conda 虚拟Python环境中的TensorRT配置 0. 简介 官方镜…...
信号模块--simulink操作
位置simulink/sourses 常用的模块 功能:常数模块,提供一个常数 数据设置可以是一维或多维 一维数据设置 多维数据设置(例三维数据设置) 方波脉冲模块 模块用于按固定间隔生成方波脉冲信号 振幅就是方波的幅度,0到…...
强化学习笔记(3)——基于值函数的方法和策略梯度方法
分为两大类方法: 基于值函数的方法(Temporal Difference Methods, TD Methods) 策略梯度方法(Policy Gradient Methods)。 二者不同之处: 通过值函数来间接表达隐式的策略,一个是直接迭代优化策…...
新年新挑战:如何用LabVIEW开发跨平台应用
新的一年往往伴随着各种新的项目需求,而跨平台应用开发无疑是当前备受瞩目的发展趋势。在众多开发工具中,LabVIEW 以其独特的图形化编程方式和强大的功能,为开发跨平台应用提供了有效的途径。本文将深入探讨如何运用 LabVIEW 开发能够在不同操…...
事务04之死锁,锁底层和隔离机制原理
死锁和事务底层原理 文章目录 死锁和事务底层原理一:MySQL中的死锁现象1:何为死锁1.1:死锁的概念1.2:死锁产生的四个必要条件: 2:MySQL的死锁2.1:死锁的触发2.2:MySQL的死锁如何解决…...
第05章 17 Contour 过滤器介绍与例子
vtkContourFilter 是 VTK(Visualization Toolkit)中的一个关键类,用于从输入数据生成等值线或等值面。它是基于阈值的过滤器,可以从标量字段中提取等值线或等值面。vtkContourFilter 的核心功能是根据用户指定的值生成等值线或等值…...
Golang 并发机制-2:Golang Goroutine 和竞争条件
在今天的软件开发中,我们正在使用并发的概念,它允许一次执行多个任务。在Go编程中,理解Go例程是至关重要的。本文试图详细解释什么是例程,它们有多轻,通过简单地使用“go”关键字创建它们,以及可能出现的竞…...
【4Day创客实践入门教程】Day0 创想启程——课程与项目预览
Day0 创想启程——课程与项目预览 目录 Day0 创想启程——课程与项目预览前言学习内容基本的单片机开发技能简单的焊接技能简单的MicroPython程序 后记 Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机与MicroPython初步Day3 实战演练——桌面迷你番茄钟Day4 迈…...
洛谷P3372 【模板】线段树 1以及分块
【模板】线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m,分别表示该数列数字的个数和操作的总个数。 …...
