【实战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接口的后端平台。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/130561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node插件express(路由)的插件使用(二)——body-parser和ejs插件的基本使用

文章目录 前言一、express使用中间件body-parser获取请全体的数据1. 代码2. 效果 二、express使用ejs&#xff08;了解即可&#xff09;1.安装2.作用3.基本使用&#xff08;1&#xff09;代码&#xff08;2&#xff09;代码分析和效果 4.列表渲染&#xff08;1&#xff09;代码…

git更改远程仓库地址

1、输入命令【git remote -v】查看当前git远程仓库地址 2、输入命令【git remote set-url origin 新地址】替换成新地址 3、输入命令【git remote -v 】查看是否更新成功

Java 集合基础面试题(高频)

Java集合从分类上看&#xff0c;有 collection 和 map 两种&#xff0c;前者是存储对象的集合类&#xff0c;后者存储的是键值对&#xff08;key-value&#xff09; Collection Set 主要功能是保证存储的集合不会重复&#xff0c;至于集体是有序还是无序的&#xff0c;需要看…

MySQL 表的增删查改(CRUD)

MySQL 表的增删查改(CRUD) 文章目录 MySQL 表的增删查改(CRUD)1. 新增(Create)2. 查询(Retrieve)2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 别名2.5 去重&#xff1a;DISTINCT2.6 排序&#xff1a;ORDER BY2.7 条件查询2.8 分页查询: LIMIT 3. 修改(Update)4. 删除(D…

CodeWhisperer 的使用心得

文章作者&#xff1a;小SS 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术&#xff0c;观点&#xff0c;和项目&#xff0c;并将中国优秀开发者或技术推荐给全球云社…

王道p18 6.从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同(c语言代码实现)

视频讲解在这里&#xff1a;&#x1f447; 顺序表p18 第6题wd数据结构课后代码题&#xff08;c语言代码实现&#xff09;_哔哩哔哩_bilibili 本题代码如下 void deleterepeat(struct sqlist* L) {if (L->length 0)printf("表空");int i 0;int k 0;for (i 1…

Android MVI架构的深入解析与对比

什么是MVI&#xff1f; M&#xff1a;model&#xff0c;此处的model并不是传统的数据模块&#xff0c;它是指用来存储视图状态UI State的一个模块 。比如请求数据时的loading、请求失败的提示页面等UI层面的变化状态。 V&#xff1a;view&#xff0c;视图模块 I&#xff1a;…

Mac终端学习

命令1&#xff1a;ifconfig 作用&#xff1a;列出本机所有的网络设备以及其上面的配置&#xff0c;主要指的是ip地址和mac地址 其他用法&#xff1a;sudo ifconfig en4 add 10.10.10.12 netmask 255.255.255.0 作用&#xff1a;给en4加入别的网段 其他用法&#xff1a;sudo i…

Visual Studio Code 常用快捷键大全

Visual Studio Code 常用快捷键大全 快捷键是编码过程中经常使用&#xff0c;且能够极大提升效率的部分&#xff0c;这里给大家介绍一些VS Code中非常有用的快捷键。 打开和关闭侧边栏 Mac — Command B Windows — Ctrl B Ubuntu — Ctrl B 选择单词 Mac — Command D …

GAMP源码阅读:PPP中的模型改正:天线相位中心、天线相位缠绕、潮汐、地球自转效应、引力延迟

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、卫星天线相位中心改正1、原理2、文件读取3、setpcv()&#xff1a;设置天线参数4、satantoff()&#xff1a;卫星 PCO 改正5、satantpcv()&…

CorelDRAW2023最新版本号24.5.0.731

CDR2023是一款近年来备受瞩目的工具软件&#xff0c;它提供了数据存储、分析以及处理的能力。但是&#xff0c;对于许多用户来说&#xff0c;CDR2023到底好用不好用还需要进行深入的分析和探讨。在本文中&#xff0c;我们将从多个角度分析CDR2023这款软件。 CorelDRAW2023版win…

【Proteus仿真】【Arduino单片机】RGB彩灯

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用WS2812 RGB彩灯等。 主要功能&#xff1a; 系统运行后&#xff0c;RGB彩灯花样显示。 二、软件设计 /* 作者&#xff1a;嗨小易&#xff08;…

如何通过智能管理箱实现高效文件管理:关键字轻松修改文件名

在信息化时代&#xff0c;文件管理变得尤为重要。智能管理箱已经成为我们生活中不可或缺的一部分。它可以帮助我们高效地管理各种文件&#xff0c;使得我们的工作和生活更加便捷。是一种高效的文件管理工具&#xff0c;可以帮助我们轻松地整理和分类文件&#xff0c;提高工作效…

Linux - 进程控制(下篇)- 进程等待

进程等待 为什么进程需要等待&#xff1f; 我们知道&#xff0c;在Linux 当中&#xff0c;父子进程之间一些结构就是一些多叉树的结构&#xff0c;一个父进程可能管理或者创建了很多个字进程。 而其实我们在代码当中使用fork&#xff08;&#xff09;函数创建的子进程的父进程…

vivo发布“蓝心千询”自然语言对话机器人

&#x1f989; AI新闻 &#x1f680; vivo发布“蓝心千询”自然语言对话机器人 摘要&#xff1a;vivo今日发布了“蓝心千询”自然语言对话机器人&#xff0c;基于蓝心大模型。蓝心千询可以进行知识信息的快速问答&#xff0c;文学创作、图片生成&#xff0c;甚至还能编写程序…

mit6.s081 笔记

1、系统调用 系统调用具体过程。 在任何地方&#xff0c;当我们需要使用系统调用时&#xff0c;只需要include “user/user.h”&#xff0c;就可以通过里面的函数声明来调系统调用&#xff0c;其函数的具体实现由 user/usys.pl 脚本帮我们生成对应的汇编代码&#xff08;具体代…

ENVI波段合成

1、envi5.3合成&#xff08;这种方法&#xff0c;必须有地理参考才可以&#xff09; 在工具栏处搜索波段&#xff0c;找到波段合成&#xff08;Layer Stacking&#xff09; 设置合成波段&#xff0c;其他默认 2、envi classic&#xff08;没有地理坐标也可以&#xff09; 我们…

https网站加载http资源问题

https网站加载http资源问题 前言&#xff1a;最近项目对接了一个第三方的平台、我们需要展示第三方平台返回来的图片资源、由于我们的服务器设置为了https、但是第三方平台返回的图片链接是 http 资源。所以就出现了图片无法加载出来的问题&#xff0c;在此记录一下问题的解决…

Java日期比较大小的3种方式及拓展

目录 一、字符串String的日期比较 二、数值型long比较 三、日期型Date直接比较 四、Date型日期的获取方式 五、Calendar获取年月日【拓展】 一、字符串String的日期比较 String型的日期通过compareTo()来比较&#xff0c;因为String实现了comparable接口 endDate.compare…

右击文件或者文件夹使用vscode打开

平常我们在打开项目时&#xff0c;经常会需要快捷打开方式&#xff0c;直接使右键使用编辑器打开&#xff0c;但是有时在安装时忘记了选择 “Add “Open with Code” action to Windows Explorer file context menu” 在Windows资源管理器文件上下文菜单中添加“用代码打开”操…