当前位置: 首页 > news >正文

【实战Flask API项目指南】之二 Flask基础知识

实战Flask API项目指南之 Flask基础知识

本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧!

前言

当小菜踏入Flask后端开发的世界,掌握Flask应用的基本结构是起步的关键。本文将深入探讨基本的Flask应用结构,以及如何构建一个简单的Flask应用。

注意:本文叙述的比较详细(即比较啰嗦),不喜欢长篇大论的读者朋友们直接看末尾的  运行Flask应用  即可。




安装

在开始之前,小菜需要安装Flask。可以通过以下步骤进行安装:

  1. 打开命令行终端。
  2. 运行以下命令来安装 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.pywsgi.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.pywsgi.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项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 当小菜踏入Flask后端开发的世界&…...

Linux 编译链接那些事儿(02)C++链接库std::__cxx11::basic_string和std::__1::basic_string链接问题总结

1 问题背景说明 在自己的项目源码中引用libeasysqlite.so时编译成功&#xff0c;但运行时遇到问题直接报错&#xff0c;找不到符号 symbol&#xff1a;_ZN3sql5FieldC1ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_10field_typeEi。 2 问题描述和解…...

按键精灵中的UI界面操作

1. 按键精灵中UI界面常用的控件 1. 文字框 界面1: {标签页1:{文字框:{名称:"文字框1",显示内容:"显示内容",文字大小:0,高度:0,宽度:0,注释:"文字大小、高度、宽度是可选属性&#xff0c;如需使用默认值&#xff0c;可保持值为0或直接删除此属性&qu…...

dpdk 程序如何配置网卡收发包队列描述符配置?

问题描述 dpdk 程序在配置网卡队列时会涉及收发包队列描述符数量配置问题&#xff0c;收发包描述符的数量看似是一个简单的配置&#xff0c;却对转发性能有着一定的影响。实际业务程序中&#xff0c;收发包描述符大小配置一般参考 dpdk 内部示例程序配置进行&#xff0c;经验之…...

二蛋赠书七期:《云原生数据中台:架构、方法论与实践》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…...

计算机毕设 基于大数据的服务器数据分析与可视化系统 -python 可视化 大数据

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

初识rust

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

shiro-cve2016-4437漏洞复现

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

【MongoDB-Redis-MySQL-Elasticsearch-Kibana-RabbitMQ-MinIO】Java全栈开发软件一网打尽

“Java全栈开发一网打尽&#xff1a;在Windows环境下探索技术世界的奇妙之旅” 前言 全栈开发是一项复杂而令人兴奋的任务&#xff0c;涵盖了从前端到后端、数据库到可视化层、消息队列到文件存储的广泛领域。本文将带您深入探讨在Windows环境下进行全栈开发的过程&#xff0…...

Implementing class错误解决

最近在使用IDEASmart Tomcat启动项目时&#xff0c;报以下错误&#xff1a; Injection of resource dependencies failed; nested exception is java.lang.IncompatibleClassChangeError: Implementing class根据网上结论加上我这里的原因&#xff0c;总共以下几个方面&#x…...

关于 国产系统UOS系统Qt开发Tcp服务器外部连接无法连接上USO系统 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134254817 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…...

初阶JavaEE(15)(Cookie 和 Session、理解会话机制 (Session)、实现用户登录网页、上传文件网页、常用的代码片段)

接上次博客&#xff1a;初阶JavaEE&#xff08;14&#xff09;表白墙程序-CSDN博客 Cookie 和 Session 你还记得我们之前提到的Cookie吗&#xff1f; Cookie是HTTP请求header中的一个属性&#xff0c;是一种用于在浏览器和服务器之间持久存储数据的机制&#xff0c;允许网站…...

C++入门学习(1)命名空间和输入输出

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

AI:58-基于深度学习的猫狗图像识别

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

【原创】java+swing+mysql宠物领养管理系统设计与实现

摘要&#xff1a; 生活中&#xff0c;有很多被人遗弃的宠物&#xff0c;这些宠物的处理成为了一个新的难题。生活中也有许多人喜欢养宠物&#xff0c;为了方便大家进行宠物领养&#xff0c;提高宠物领养管理的效率和便利性。本文针对这一问题&#xff0c;提出设计和实现一个基…...

虚拟机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语句(常问&#xff09; 1&#xff09;sql写过的复杂的运算 聚合函数&#xff0c;case when then end语句进行条件运算&#xff0c;字符串的截取、替换&#xff0c;日期的运算&#xff0c;排名等等&#xff1b;行列转换&#xff1b; eg&#xff1a;行列转换 SELE…...

HMM与LTP词性标注之命名实体识别与HMM

文章目录 知识图谱介绍NLP应用场景知识图谱&#xff08;Neo4j演示&#xff09;命名实体识别模型架构讲解HMM与CRFHMM五大要素&#xff08;两大状态与三大概率&#xff09;HMM案例分享HMM实体识别应用场景代码实现 知识图谱介绍 NLP应用场景 图谱的本质&#xff0c;就是把自然…...

Sui发布RPC2.0 Beta,拥抱GraphQL并计划弃用JSON-RPC

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

设计模式—结构型模式之桥接模式

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

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...