东营企业网站排名/sem优化师是什么意思
Python Web 开发 FastAPI 入门:从基础架构到框架比较
目录
- 🖥️ Web 服务器概述(如 Nginx、Apache)
- 🔗 前后端分离架构详解
- 🔄 HTTP 路由和请求处理机制
- 🧰 Web 框架概述:Django、Flask、FastAPI 比较
1. 🖥️ Web 服务器概述(如 Nginx、Apache)
Web 服务器的主要功能是接收来自客户端的 HTTP 请求,并将请求转发到后端应用,最终返回请求结果。在现代 Web 开发中,Web 服务器不仅仅是请求转发的中介,它还承担着负载均衡、静态文件托管、安全设置等多个职责。最常见的 Web 服务器包括 Nginx 和 Apache。
Nginx:高效的反向代理服务器
Nginx 是一个高性能的 HTTP 和反向代理服务器,它广泛应用于现代 Web 架构中,特别是在处理高并发请求时。Nginx 的主要优势是处理并发连接的能力,它采用事件驱动的架构,能够非常高效地处理大量的请求。
Nginx 可以作为反向代理服务器,将 HTTP 请求转发给后端应用(如 FastAPI)。这种方式的优势在于可以将 Web 服务器的负载均衡与安全控制交给 Nginx,从而使后端应用更专注于业务逻辑的处理。
例如,FastAPI 应用可以通过 Uvicorn 启动,而 Nginx 负责将请求转发给 Uvicorn:
server {listen 80;server_name yourdomain.com;location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
在上述配置中,Nginx 会接收来自客户端的请求,并将其转发到本地运行的 FastAPI 应用(通过 Uvicorn 启动在 8000 端口)。这种方式可以让 Nginx 处理静态资源请求,而将动态请求交给 FastAPI 处理。
Apache:成熟的 Web 服务器
Apache 是另一个流行的 Web 服务器,它更注重模块化、扩展性和兼容性。虽然 Nginx 在性能上有优势,尤其是在高并发情况下,Apache 仍然因其成熟的生态系统、丰富的模块支持而广泛使用。
Apache 的配置文件通常位于 httpd.conf
或 sites-available
目录中。对于 FastAPI 应用,Apache 可以与 mod_proxy 或 mod_rewrite 模块配合使用,将请求转发到 FastAPI 应用:
<VirtualHost *:80>ServerName yourdomain.comProxyPass / http://127.0.0.1:8000/ProxyPassReverse / http://127.0.0.1:8000/
</VirtualHost>
通过上述配置,Apache 也能够实现类似 Nginx 的反向代理功能。
总结
Nginx 和 Apache 都是常见的 Web 服务器,它们各有特点:Nginx 更加轻量且适合高并发场景,Apache 则以其灵活的模块和成熟的功能受到开发者的喜爱。在实际应用中,选择哪种 Web 服务器往往取决于项目的规模、性能需求和技术栈。
2. 🔗 前后端分离架构详解
前后端分离架构是一种现代 Web 开发模式,其中前端和后端被设计为两个独立的部分,分别由不同的团队或开发人员进行开发和维护。前端通常负责用户界面的展示和交互,后端则处理业务逻辑和数据存储。通过 API(通常是 RESTful API 或 GraphQL API),前后端通过 HTTP 协议进行通信。
前后端分离的优势
-
解耦与独立开发
前后端分离使得前端和后端开发可以独立进行,前端开发人员专注于 UI/UX 和用户体验,后端开发人员则专注于处理数据和业务逻辑。两者通过定义良好的 API 接口进行交互,从而达到高效的协作。 -
跨平台支持
前后端分离可以使得前端应用与后端应用完全独立。前端可以选择任何技术栈来开发,如 React、Vue、Angular 等;后端则可以使用任何服务器端技术,如 FastAPI、Django、Flask 等。 -
提高维护性
当前端和后端分离时,维护和更新变得更加容易。修改前端页面时,后端不需要进行更改,反之亦然。此外,前后端分离便于代码的模块化,提升了可读性和扩展性。 -
便于部署与扩展
前端和后端可以独立部署。例如,前端可以部署在 CDN 上,而后端应用则部署在云服务器或专用的容器中。这种方式便于横向扩展,提高了系统的可伸缩性。
如何实现前后端分离
在实际开发中,前后端分离的实现通常通过 RESTful API 或 GraphQL 来完成。后端开发人员提供 API 接口,前端开发人员通过 HTTP 请求访问这些接口,获取数据并进行展示。FastAPI 是一个非常适合构建 RESTful API 的框架,它具有以下特点:
- 高性能,支持异步请求。
- 自动生成 OpenAPI 文档,方便前端开发人员查看接口规范。
- 支持请求验证和数据模型(通过 Pydantic)。
例如,以下是一个 FastAPI 后端提供的 API 接口,用于获取所有商品列表:
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Listapp = FastAPI()class Item(BaseModel):name: strprice: floatitems = [{"name": "Laptop", "price": 1000},{"name": "Phone", "price": 500},
]@app.get("/items", response_model=List[Item])
def get_items():return items
前端应用可以通过以下方式(假设使用 Vue.js 或 React)请求该 API,并将结果展示在页面上:
fetch('http://localhost:8000/items').then(response => response.json()).then(data => console.log(data));
通过这种方式,前后端通过 HTTP 协议传递 JSON 格式的数据,确保了清晰的分离。
3. 🔄 HTTP 路由和请求处理机制
在 Web 开发中,路由是决定客户端请求如何被处理的核心机制。HTTP 请求是通过 URL 路径和请求方法来匹配路由的。路由系统帮助 Web 服务器识别请求的具体内容,确保请求被正确处理,并最终返回响应。
FastAPI 路由的基本概念
在 FastAPI 中,路由的定义是非常简洁的。每个路由函数都与一个 URL 路径和 HTTP 请求方法(如 GET、POST、PUT、DELETE)关联。以下是一个简单的例子:
from fastapi import FastAPIapp = FastAPI()@app.get("/hello")
def read_hello():return {"message": "Hello, World!"}
在上述代码中,@app.get("/hello")
是一个路由装饰器,表示当客户端发送一个 GET 请求到 /hello
路径时,FastAPI 会调用 read_hello
函数并返回响应。路由是通过路径和 HTTP 方法来匹配的,FastAPI 会根据请求的类型和 URL 自动选择正确的处理函数。
动态路由和路径参数
在实际应用中,路由通常会带有动态路径参数。例如,访问某个商品的详情页面时,URL 中可能包含商品的 ID:
@app.get("/items/{item_id}")
def get_item(item_id: int):return {"item_id": item_id, "name": "Laptop", "price": 1000}
在这个例子中,item_id
是动态路径参数,FastAPI 会自动将其提取并传递给函数。动态路由使得 API 更加灵活,可以根据不同的输入参数返回不同的内容。
路由的请求方式
FastAPI 支持多种 HTTP 请求方法,包括 GET、POST、PUT 和 DELETE。不同的请求方法对应着不同的操作类型:
- GET:获取资源。
- POST:创建资源。
- PUT:更新资源。
- DELETE:删除资源。
@app.post("/items/")
def create_item(item: Item):return {"name": item.name, "price": item.price}
上面的代码展示了一个 POST 请求的路由,用于创建新的商品
项。
4. 🧰 Web 框架概述:Django、Flask、FastAPI 比较
在 Python Web 开发中,常见的 Web 框架包括 Django、Flask 和 FastAPI。这些框架各有特点,适合不同的开发场景。
Django:功能全面的全栈框架
Django 是一个全栈 Web 框架,提供了许多开箱即用的功能,包括 ORM(对象关系映射)、认证系统、管理后台、表单处理等。它非常适合构建大型 Web 应用,并且有着非常强大的社区支持和丰富的插件。
-
优点:
- 提供完整的功能集,适合快速开发。
- 有强大的 ORM 支持,简化数据库操作。
- 内建的管理后台便于内容管理。
-
缺点:
- 比较臃肿,项目启动时需要较多的配置。
- 对于一些小型应用或微服务架构可能过于复杂。
Flask:轻量级微框架
Flask 是一个轻量级的 Web 框架,它提供了最基本的 Web 应用功能,适合构建小型应用或微服务。Flask 没有内建的 ORM,需要开发者自行选择数据库解决方案。
-
优点:
- 灵活,适合微服务架构或小型应用。
- 易于学习和使用,开发速度较快。
-
缺点:
- 功能较为简单,可能需要手动集成许多插件。
FastAPI:高性能的现代 Web 框架
FastAPI 是一个新兴的 Web 框架,专注于高性能的异步支持。它基于 Python 的类型提示,自动生成 OpenAPI 文档,且支持异步编程,适合需要高并发的应用。
-
优点:
- 高性能,支持异步编程,适合处理高并发请求。
- 自动生成 API 文档,便于前端开发。
- 类型检查和数据验证非常方便。
-
缺点:
- 相比 Django,社区和文档尚在发展阶段。
总结
- Django 适合需要快速开发大型应用并且需要内建功能的场景。
- Flask 适合构建小型、轻量的 Web 应用或微服务。
- FastAPI 适合构建需要高性能、异步支持和自动化 API 文档的应用,特别是在需要处理大量并发请求时。
相关文章:

Python Web 开发 FastAPI 入门:从基础架构到框架比较
Python Web 开发 FastAPI 入门:从基础架构到框架比较 目录 🖥️ Web 服务器概述(如 Nginx、Apache)🔗 前后端分离架构详解🔄 HTTP 路由和请求处理机制🧰 Web 框架概述:Django、Fla…...

基于STM32的智能仓库管理系统设计
目录 引言环境准备 硬件准备软件准备智能仓库管理系统基础 控制系统架构功能描述代码实现:实现智能仓库管理系统 4.1 RFID标签读取模块4.2 库存管理模块4.3 数据显示与监控模块4.4 无线通信模块应用场景:智能仓库管理系统优化问题解决方案与优化收尾与总…...

排序算法--堆排序【图文详解】
“留在码头的船才最安全” “但亲爱的,那不是造船的目的。 堆--插入heapInsert 原来有一个大根堆,如图: 现在要新插入一个数字50,进行插入 流程:和父亲相比,如果比父亲大,和父亲交换ÿ…...

FCBP 认证考试要点摘要
理论知识 数据处理与分析:包括数据的收集、清洗、转换、存储等基础操作,以及数据分析方法,如描述性统计分析、相关性分析、数据挖掘算法等的理解和应用 。数据可视化:涉及图表类型的选择与应用,如柱状图、折线图、饼图…...

鸿蒙生态崛起的机遇有什么
鸿蒙生态系统的崛起为各个领域带来了多个机遇,主要体现在以下几个方面: 智能设备的互联互通:鸿蒙系统旨在实现不同设备之间的无缝连接,为物联网(IoT)设备的发展提供了良好的基础。这将推动智能家居、智慧城…...

基础(函数、枚举)错题汇总
枚举默认从0开始,指定后会按顺序赋值 而这个枚举变量X,如果在全局(函数外部)定义,那默认为0,如果在函数内部(局部变量),那就是随机值,必须初始化。 枚举变量…...

【Spark源码分析】规则框架- `analysis`分析阶段使用的规则
analysis分析阶段使用的规则 规则批策略规则说明SubstitutionfixedPointOptimizeUpdateFields该规则优化了 UpdateFields 表达式链,因此看起来更像优化规则。但是,在处理深嵌套模式时,UpdateFields 表达式树可能会非常复杂,导致分…...

mysql--二进制安装编译安装yum安装
二进制安装 创建用户和组 [rootlocalhost ~]# groupadd -r -g 306 mysql [rootlocalhost ~]# useradd -r -g 306 -u 306 -d /data/mysql mysql 创建文件夹并添加所属文件用户和组 [rootlocalhost ~]# mkdir -p /data/mysql [rootlocalhost ~]# chown mysql:mysql /data/mysql …...

《Django 5 By Example》阅读笔记:p339-p358
《Django 5 By Example》学习第12天,p339-p358总结,总计20页。 一、技术总结 1.项目(购物网站) django-admin startproject myshop 虽然这里只是示例,但我觉得这种命名为 myxxx 的习惯非常不好,因为在实际应用中,是…...

鸿蒙修饰符
文章目录 一、引言1.1 什么是修饰符1.2 修饰符在鸿蒙开发中的重要性1.3 修饰符的作用机制 二、UI装饰类修饰符2.1 Styles修饰符2.1.1 基本概念和使用场景2.1.2 使用示例2.1.3 最佳实践 2.2 Extend修饰符2.2.1 基本概念2.2.2 使用示例2.2.3 Extend vs Styles 对比2.2.4 使用建议…...

springboot359智慧草莓基地管理系统(论文+源码)_kaic
毕 业 设 计(论 文) 题目:智慧草莓基地管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本智慧草莓基地管理系统就…...

单片机位数对性能会产生什么影响?!
单片机的位数是指其处理器核心的位宽,通常以比特(bit)为单位。常见的位数有8位、16位、32位和64位等。 单片机位数越高,处理器能够处理的数据量越大,性能也相应提高。 以下是对单片机位数对性能影响的详细分析&#…...

stm32内部高速晶振打开作为主时钟
首先建议你别这么干,因为内部晶振特别容易受温度等外界影响,很容易卡死或堵死程序 我是因为没画外部晶振电路,所以只能开内部晶振来作为时钟 适用于stm32f103系列 把下面的代码换掉源文件里的时钟源配置 /* 开启HSI 即内部晶振时钟 */RCC…...

【分页查询】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

【CSS in Depth 2 精译_061】9.4 CSS 中的模式库 + 9.5 本章小结
当前内容所在位置(可进入专栏查看其他译好的章节内容) 【第九章 CSS 的模块化与作用域】 ✔️ 9.1 模块的定义 9.1.1 模块和全局样式9.1.2 一个简单的 CSS 模块9.1.3 模块的变体9.1.4 多元素模块 9.2 将模块组合为更大的结构 9.2.1 模块中多个职责的拆分…...

惠普电脑切换默认F1至F12快捷键,FN切换
发现新买的惠普电脑,按F1至F12发现是快捷功能键,而按fnF1至F12才是windows的功能键和正常我自己使用的电脑刚好相反,实在太不方便了。 解决办法需要进入biso里面去把功能键模式选中给关掉,才能恢复回来...

计算机的错误计算(一百七十)
摘要 回复一中学生来信,探讨 MATLAB 关于算式 的计算问题。 在计算机的错误计算(一百三十二)中,我们探讨了手持式计算器关于算式 的计算问题。一中学生来信询问该算式在数学软件中是否会出错。 例1. 在 MATLAB 中计算 . 首…...

Python `async def` 函数中使用 `yield` 和 `return` 的区别
Python async def 函数中使用 yield 和 return 的区别 1. return 的使用示例代码输出结果解释 2. yield 的使用示例代码输出结果解释 3. 总结 在 Python 中,async def 函数用于定义异步函数,这些函数可以在执行过程中暂停和恢复,通常与 await…...

JAVA修饰符
JAVA 修饰符...

Java 单例模式:深度解析与应用
在软件开发领域,设计模式是解决常见设计问题的有效方案,而单例模式作为创建型设计模式中的一员,其重要性不容小觑。它能够确保一个类仅有一个实例,并提供全局访问点,这一特性在资源管理、配置信息读取、线程池管理以及…...

软件质量保证——单元测试之白盒技术
笔记内容及图片整理自XJTUSE “软件质量保证” 课程ppt,仅供学习交流使用,谢谢。 程序图 程序图定义 程序图P(V,E),V是节点的集合(节点是程序中的语句或语句片段),E是有向边的集合…...

Vue0-生命周期-03
生命周期 生命周期指定就是一个对象从创建到销毁的整个过程。 Vue也是有的 完整的Vue周期包含8个阶段。 Vue官方生命周期流程图: 那这有什么用呢?我们可以在指定阶段做特殊的事件。 这些方法伴随生命周期的进行自动执行。 <!DOCTYPE html> <…...

Flutter:页面滚动
1、单一页面,没有列表没分页的,推荐使用:SingleChildScrollView() return Scaffold(backgroundColor: Color(0xffF6F6F6),body: SingleChildScrollView(child: _buildView()) );2、列表没分页,如购物车页,每个item之间…...

【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化
文章目录 IntroductionApproachPlanar Image Alignment(2D)Neural Radiance Fields (3D)Bundle-Adjusting Neural Radiance Fields Experiment平面图像对齐的定性实验合成场景上的定量实验 Introduction 在计算机视觉三维重建中,求解3D场景的表示和定位给定的相机帧…...

YOLO系列论文综述(从YOLOv1到YOLOv11)【第13篇:YOLOv10——实时端到端物体检测】
YOLOv10 1 摘要2 网络结构3 YOLOv1-v10对比 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇:YOLO系列论文、代码和主要优缺点汇总】【第3篇:YOLOv1——YOLO的开山之作】【第4篇:…...

多数元素
多数元素 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出ÿ…...

EasyDSS视频推拉流技术的应用与安防摄像机视频采集参数
安防摄像机的视频采集参数对于确保监控系统的有效性和图像质量至关重要。这些参数不仅影响视频的清晰度和流畅度,还直接影响存储和网络传输的需求。 安防摄像机图像效果的好坏,由DSP处理器和图像传感器sensor决定,如何利用好已有的硬件资源&…...

在CentOS7上更换为阿里云源
在CentOS 7上更换为阿里云YUM源可以通过以下步骤进行: 备份当前的YUM源配置文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载阿里云的YUM源配置文件 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirr…...

小程序跳转到本页面并传参
const pages getCurrentPages(); const currentPage pages[pages.length - 1]; // 当前页面路由 const route currentPage.route; // 当前页面参数 const options currentPage.options;// 构建新的 URL 参数 const newOptions {...options,// newParam: newValue }; // 你…...

Vim操作
1. Vim的模式 2.正常模式->编辑模式 在上⽅插⼊⼀⾏: O在下⽅插⼊⼀⾏: o (open)在当前光标前插⼊: i在⾏⾸插⼊: I在当前光标后插⼊: a在⾏尾插⼊: A 3.常见命令行 1、拷贝当前行 yy ,拷贝当前行向下…...