【实战Flask API项目指南】之二 Flask基础知识
实战Flask API项目指南之 Flask基础知识
本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握Flask
在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧!
前言
当小菜踏入Flask
后端开发的世界,掌握Flask
应用的基本结构是起步的关键。本文将深入探讨基本的Flask
应用结构,以及如何构建一个简单的Flask
应用。
注意:本文叙述的比较详细(即比较啰嗦),不喜欢长篇大论的读者朋友们直接看末尾的 运行Flask应用 即可。
安装
在开始之前,小菜需要安装Flask
。可以通过以下步骤进行安装:
- 打开命令行终端。
- 运行以下命令来安装
Flask
pip install flask
基础知识
接下来,会在这里介绍有关于Flask
的基础知识。
0. 最小的 Flask 应用程序
A Minimal Application:https://flask.palletsprojects.com/en/2.3.x/quickstart/
代码如下:
# hello.py
from flask import Flaskapp = Flask(__name__)@app.route("/")
def hello_world():return "<p>Hello, World!</p>"
代码释义:
- 首先导入
Flask
类。此类的一个实例将是我们的 WSGI 应用程序。 - 接下来我们创建该类的一个实例。第一个参数是应用程序的模块或包的名称。 __name__ 是一个方便的快捷方式,适用于大多数情况。这是必要的,以便
Flask
知道在哪里寻找模板和静态文件等资源。 - 然后使用route()装饰器告诉
Flask
什么URL
应该触发我们的函数。 - 该函数返回我们想要在用户浏览器中显示的消息。默认内容类型是 HTML,因此字符串中的 HTML 将由浏览器呈现。
在命令行终端,输入flask --app hello run
(这个方式有些麻烦,不推荐)
--app
参数指定了Flask
应用的名称或导入路径(这里是hello
,即文件名hello.py
)。run
命令将启动一个开发服务器来运行你的Flask
应用。它会启动一个简单的服务器用于测试和开发。
$ flask --app hello run* Serving Flask app 'hello'* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
此时在浏览器访问http://127.0.0.1:5000
,可以看到以下画面,这就说明这个web程序成功启动啦!
应用程序发现行为
- 作为快捷方式,如果文件名为 app.py 或 wsgi.py,则不必添加 --app。直接使用
flask run
即可启动flask - 有关更多详细信息,请参阅命令行界面(这个在下面再做介绍)
为了可以让小菜更深入的去理解,下面来拆解一下上面的这份 最小的 Flask 应用程序 代码。
1. Flask应用的基本结构
Flask
应用通常由 Python
文件构成,其中包含了应用的设置、路由、视图函数等。一个简单的Flask
应用通常包含以下几个主要部分:
- 导入
Flask
类:from flask import Flask
- 创建应用实例:
app = Flask(__name__)
# 导入Flask类
from flask import Flask# 创建应用实例
app = Flask(__name__)
2. 路由与视图函数
路由:routes
视图函数:view function
在Flask
中,(在下一章节中,会对该概念进行详细介绍)
- 路由用于定义URL与对应的视图函数之间的映射关系。 它告诉
Flask
应用在哪个URL路径下执行哪个视图函数。例如,@app.route('/')
装饰器告诉应用当访问根路径 “/” 时,执行后面的视图函数。 - 视图函数则负责处理具体的请求并返回响应。它们包含了你希望在特定URL被访问时执行的逻辑。在下面代码中,
def hello_world()
是一个视图函数,它返回一个简单的HTML段落,即 “Hello, World!”。
@app.route("/")
def hello_world():return "<p>Hello, World!</p>"
3. 请求与响应
当涉及到Web应用程序时,
-
请求 的是客户端(通常是浏览器)发送给服务器的信息,
-
响应 是服务器对请求作出的回应。
-
当在浏览器中输入URL并按下回车键时,浏览器会向服务器发出一个HTTP请求。在这种情况下,由于装饰器
@app.route("/")
指定了根路径 (“/”) 对应于hello_world
函数,因此它会匹配到这个路由。 -
服务器接收到请求后,
hello_world
函数被调用。这个函数并不需要接收任何参数,因为它只是简单地返回一个字符串。 -
在函数内部,
return
语句告诉服务器要返回一个响应。在这种情况下,响应是一个简单的HTML段落,即<p>Hello, World!</p>
。 -
服务器将响应发送回给浏览器,浏览器会将响应内容解析为HTML并显示在页面上。这就是为什么你在浏览器中访问根路径
http://127.0.0.1:5000
时,会看到 Hello, World! 个段落。
总结来说,在代码示例中,hello_world
函数处理请求,并生成包含 Hello, World! 的响应,最终在浏览器中显示出来。
@app.route("/")
def hello_world():return "<p>Hello, World!</p>"
4. 运行Flask应用
这里的两种运行方式效果一致
命令行 运行
还是上面 最小的 Flask 应用程序 的代码,
- 在命令行终端,输入
flask --app hello run
$ flask --app hello run
作为快捷方式,如果文件名为 app.py 或 wsgi.py,则不必添加 --app。直接使用 flask run
即可启动flask
$ flask run
Python 运行
修改 最小的 Flask 应用程序 的代码,
app.run()
: 这是在Python代码中直接调用Flask
应用实例的run()
方法来运行应用。
# app.py
from flask import Flaskapp = Flask(__name__)@app.route("/")
def hello_world():return "<p>Hello, World!</p>"# 追加的代码
if __name__ == '__main__':app.run()
这将使应用在调试模式下运行,以便在开发过程中进行实时调试和错误查找。
if __name__ == '__main__':app.run(debug=True)
tips
在 app.run()
设置了 debug=True
,当代码发生改动时服务器会自动重新加载,并且在出错时提供详细的调试信息。
换句话说,当你的代码发生变化时,Flask
服务器会自动识别修改,并且重新加载你的应用,无需手动停止并重新开始你的服务器。
即热启动。
总结
通过本文,小菜深入了解了Flask
应用的基本结构,包括创建应用实例、定义路由和视图函数,以及运行应用的两种方式。
Flask
为我们提供了一个简单而强大的方式来构建Web应用程序,让我们能够更好地掌握后端开发的基础。随着不断的实践和学习,小菜将能够更加熟练地运用Flask
来开发出功能丰富的API接口的后端平台。
相关文章:

【实战Flask API项目指南】之二 Flask基础知识
实战Flask API项目指南之 Flask基础知识 本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧! 前言 当小菜踏入Flask后端开发的世界&…...
Linux 编译链接那些事儿(02)C++链接库std::__cxx11::basic_string和std::__1::basic_string链接问题总结
1 问题背景说明 在自己的项目源码中引用libeasysqlite.so时编译成功,但运行时遇到问题直接报错,找不到符号 symbol:_ZN3sql5FieldC1ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_10field_typeEi。 2 问题描述和解…...

按键精灵中的UI界面操作
1. 按键精灵中UI界面常用的控件 1. 文字框 界面1: {标签页1:{文字框:{名称:"文字框1",显示内容:"显示内容",文字大小:0,高度:0,宽度:0,注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性&qu…...
dpdk 程序如何配置网卡收发包队列描述符配置?
问题描述 dpdk 程序在配置网卡队列时会涉及收发包队列描述符数量配置问题,收发包描述符的数量看似是一个简单的配置,却对转发性能有着一定的影响。实际业务程序中,收发包描述符大小配置一般参考 dpdk 内部示例程序配置进行,经验之…...

二蛋赠书七期:《云原生数据中台:架构、方法论与实践》
前言 大家好!我是二蛋,一个热爱技术、乐于分享的工程师。在过去的几年里,我一直通过各种渠道与大家分享技术知识和经验。我深知,每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此,我非常感激大家一直…...

计算机毕设 基于大数据的服务器数据分析与可视化系统 -python 可视化 大数据
文章目录 0 前言1 课题背景2 实现效果3 数据收集分析过程**总体框架图****kafka 创建日志主题****flume 收集日志写到 kafka****python 读取 kafka 实时处理****数据分析可视化** 4 Flask框架5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升&a…...

初识rust
调试下rust 的执行流程 参考: 认识 Cargo - Rust语言圣经(Rust Course) 新建一个hello world 程序: fn main() {println!("Hello, world!"); }用IDA 打开exe,并加载符号: 根据字符串找到主程序入口: 双击…...

shiro-cve2016-4437漏洞复现
一、漏洞特征 Apache Shiro是一款开源强大且易用的Java安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 因为在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题 在 1.2.4 版本前, 加…...

【MongoDB-Redis-MySQL-Elasticsearch-Kibana-RabbitMQ-MinIO】Java全栈开发软件一网打尽
“Java全栈开发一网打尽:在Windows环境下探索技术世界的奇妙之旅” 前言 全栈开发是一项复杂而令人兴奋的任务,涵盖了从前端到后端、数据库到可视化层、消息队列到文件存储的广泛领域。本文将带您深入探讨在Windows环境下进行全栈开发的过程࿰…...
Implementing class错误解决
最近在使用IDEASmart Tomcat启动项目时,报以下错误: Injection of resource dependencies failed; nested exception is java.lang.IncompatibleClassChangeError: Implementing class根据网上结论加上我这里的原因,总共以下几个方面&#x…...

关于 国产系统UOS系统Qt开发Tcp服务器外部连接无法连接上USO系统 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/134254817 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…...

初阶JavaEE(15)(Cookie 和 Session、理解会话机制 (Session)、实现用户登录网页、上传文件网页、常用的代码片段)
接上次博客:初阶JavaEE(14)表白墙程序-CSDN博客 Cookie 和 Session 你还记得我们之前提到的Cookie吗? Cookie是HTTP请求header中的一个属性,是一种用于在浏览器和服务器之间持久存储数据的机制,允许网站…...

C++入门学习(1)命名空间和输入输出
前言 在C语言和基本的数据结构学习之后,我们终于迎来了期待已久的C啦!C发明出来的意义就是填补一些C语言的不足,让我们更加方便的写代码,所以今天我们就来讲一下C语言不足的地方和在C中的解决办法! 一、命名空间 在学习…...

AI:58-基于深度学习的猫狗图像识别
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...

【原创】java+swing+mysql宠物领养管理系统设计与实现
摘要: 生活中,有很多被人遗弃的宠物,这些宠物的处理成为了一个新的难题。生活中也有许多人喜欢养宠物,为了方便大家进行宠物领养,提高宠物领养管理的效率和便利性。本文针对这一问题,提出设计和实现一个基…...

虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令
目录 1、虚拟机Linux-Centos系统网络配置常用命令2、Docker 的常用命令2.1 安装docker步骤命令2.2 在docker容器中安装和运行mysql 2、dockerfile关键字区别(ADD/COPY,CMD/ENTRYPOINT) 1、虚拟机Linux-Centos系统网络配置常用命令 进入网络配置文件目录 cd /etc/sysconfig/ne…...
数据分析相关知识整理_--秋招面试版
一、关于sql语句(常问) 1)sql写过的复杂的运算 聚合函数,case when then end语句进行条件运算,字符串的截取、替换,日期的运算,排名等等;行列转换; eg:行列转换 SELE…...

HMM与LTP词性标注之命名实体识别与HMM
文章目录 知识图谱介绍NLP应用场景知识图谱(Neo4j演示)命名实体识别模型架构讲解HMM与CRFHMM五大要素(两大状态与三大概率)HMM案例分享HMM实体识别应用场景代码实现 知识图谱介绍 NLP应用场景 图谱的本质,就是把自然…...

Sui发布RPC2.0 Beta,拥抱GraphQL并计划弃用JSON-RPC
为了解决现有RPC存在的许多已知问题,Sui正在准备推出一个基于GraphQL的新RPC服务,名为Sui RPC 2.0。GraphQL是一种开源数据查询和操作语言,旨在简化需要复杂数据查询的API和服务。 用户目前可以访问Sui主网和测试网网络的Beta版本的只读快照…...

设计模式—结构型模式之桥接模式
设计模式—结构型模式之桥接模式 将抽象与实现解耦,使两者都可以独立变化。 在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...