用它5分钟以后,我放弃用了四年的 Flask

用RK3588 NPU加速人脸识别:从本地测试到服务器部署的完整流程(含ONNX模型) 本文详细介绍了如何利用RK3588 NPU加速人脸识别系统,从模型优化到高并发服务部署的全流程。通过RetinaFace和FaceNet模型的协同推理,结合ONNX模型转换和NPU特有优化技巧,显著提升识别效率。文章还涵盖了gRPC通信架构设计、性能压测及实际部署经验,为开发者提供了一套完整的解决方案。 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

有一个非常简单的需求:编写一个 HTTP 接口,使用 POST 方式发送一个 JSON 字符串,接口里面读取发送上来的参数,对其中某个参数进行处理,并返回。

如果我们使用 Flask 来开发这个接口,那么代码是这样的:

from flask import Flask, request

app = Flask(__name__)


@app.route('/insert', methods=['POST'])
def insert():
    info = request.json
    name = info['name']
    age = info['age']
    age_after_10_years = age + 10
    msg = f'此人名叫:{name},10年后,此人年龄:{age_after_10_years}'
    return {'success': True, 'msg': msg}

代码看起来已经很简洁了。我们用requests发个请求看看效果,如下图所示:

看起来没什么问题。

现在,我搞点破坏,把age字段改成字符串,再运行一下:

不出所料,报错了。

现在我们把age字段改回数字,但是直接移除name字段:

又报错了。

为了防止用户不按规矩提交数据,我们必须在接口里面做好各种异常数据的判断。于是增加判断以后的代码变得复杂了:

@app.route('/insert', methods=['POST'])
def insert():
    info = request.json
    name = info.get('name', '')
    if not name:
        return {'success': False, 'msg': 'name 参数不可省略,不可为空!'}
    age = info.get('age', 0)
    if not isinstance(age, int):
        return {'success': False, 'msg': 'age参数不是数字!'}
    age_after_10_years = age + 10
    msg = f'此人名叫:{name},10年后,此人年龄:{age_after_10_years}'
    return {'success': True, 'msg': msg}

看来,用 Flask,虽然能让你用很短的代码写出一个能工作的项目。但要写成一个可以正常使用的项目,还是需要你自己写更多代码。

下面我们来看一下,现代化的 web 框架:FastApi能把这个工程简化到什么程度:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class People(BaseModel):
    name: str
    age: int
    address: str
    salary: float

@app.post('/insert')
def insert(people: People):
    age_after_10_years = people.age + 10
    msg = f'此人名字叫做:{people.name},十年后此人年龄:{age_after_10_years}'
    return {'success': True, 'msg': msg}

我们还是使用 requests 发一条信息给 FastApi 开发的 HTTP 接口。对于正常数据,正常使用:

现在我们把age字段改成字符串:

返回友好的提示信息,告诉我类型错误:age 字段不是 integer。

我们再试一试把name字段去掉:

返回友好信息,提示值错误:name字段丢失。

整个过程中,对类型的检查全都由 FastApi 自己完成。我们省下来很多时间。

我用了 Flask 四年,但在使用了 5 分钟 FastApi 以后,我决定以后不再使用 Flask 了。

回过头来,我们好好介绍一下 FastApi。

使用pip或者pipenv即可安装 FastApi:

pip install fastapi
pipenv install fastapi

安装完成以后,我们来完成第一个 API:

from fastapi import FastAPI

app = FastAPI()


@app.get('/')
def index():
    return {'message': '你已经正确创建 FastApi 服务!'}

这里的写法跟 Flask 几乎一致。只不过在 Flask 中,我们定义路由的装饰器为@app.route('/')。而这里写为@app.get('/')

如下图所示:

写好代码以后,我们需要使用uvicorn来运行 FastApi。首先使用pip或者pipenv安装uvicorn:

pip install uvicorn
pipenv install uvicorn

然后执行命令:

uvicorn main:app --reload

其中main表示我们的代码文件为main.py,app表示我们初始化的 FastApi 对象的名字。--reload参数表示在修改了代码以后立即生效,不需要重启。

运行命令以后,我们访问http://127.0.0.1:8000可以看到接口已经正确返回了 JSON 格式的数据:

那么如何定义一个带参数的 GET 方法呢?我们再写一段代码:

@app.get('/query/{uid}')
def query(uid):
    msg = f'你查询的 uid 为:{uid}'
    return {'success': True, 'msg': msg}

写好代码以后,我们直接在浏览器里面访问新的地址,可以看到修改已经生效了,如下图所示:

如果想限定 uid 只能是数字,不能是字符串怎么办呢?你只需要多加 4 个字符:

@app.get('/query/{uid}')
def query(uid: int):
    msg = f'你查询的 uid 为:{uid}'
    return {'success': True, 'msg': msg}

对函数query的参数使用类型标注,标注为 int 类型。现在我们再来访问一下接口:

当 query 后面的参数不是整数时,正常报错了。

我们再来看一下本文一开始的 POST 方法。在使用 Flask 的时候,我们需要手动验证用户 POST 提交上来的数据是什么格式的,字段对不对。

但使用 FastApi 的时候,我们只需要类型标注就能解决所有问题。首先我们导入from pydantic import BaseModel,然后继承BaseModel实现我们允许 POST 方法提交上来的数据字段和格式:

from pydantic import BaseModel

app = FastAPI()


class People(BaseModel):
    name: str
    age: int
    address: str
    salary: float

People这个类通过类型标注,指定了它里面的 4 个字段和他们的类型。现在,我们来实现 POST 方法:

@app.post('/insert')
def insert(people: People):
    age_after_10_years = people.age + 10
    msg = f'此人名字叫做:{people.name},十年后此人年龄:{age_after_10_years}'
    return {'success': True, 'msg': msg}

insert函数的参数people通过类型标注指定为People类型。

当我们使用 POST 方式提交数据时,FastApi 自动会以People中定义的字段为基准来校验数据,发现不对就返回报错信息。

除了开发接口变得非常简单外,FastApi 还会自动帮我们生成接口文档。大家访问http://127.0.0.1:8000/docs,可以看到接口文档已经自动生成好了:

这个接口不仅能看,而且直接就能在接口页面修改样例数据,发送请求,现场测试:

以上是对 FastApi 的极简介绍。有兴趣的同学可以查阅它的官方文档[1]

最后,告诉大家,FastApi 是一个异步 Web 框架,它的速度非常非常非常快。远远超过 Flask。

FastApi 是最快的几个 Web 框架之一。速度可以匹敌 Golang 写的接口。详细的对比可以看:one of the fastest Python frameworks available[2]

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~

题图:pexels,CC0 授权。

好文和朋友一起看~

【谷粒商城】分布式事务与下单 =购物车== 构建gulimall-cart,复制静态资源到nginx,修改网关 购物车分为离线购物车和登录购物车 离线购物车重启浏览器了也还有 1、购物车需求 特点:读多写少,放入数据库并不合适 登录状态:登录购物车 放入数据库 mongodb 放入redis(采用) 登录以后,将离线购物车里合并后清空离线购物车 未登录状态:离线购物车 放入localstorage浏览器的技术 cookie WebSQL 放入redis(采用) 浏览器重启后还在 2、购物车VO (1) 数据结构分析 阅读详情

相关推荐

数字IC后端时钟树综合实战:OCC电路优化与时钟树平衡策略

本文深入探讨了数字IC后端设计中时钟树综合的关键挑战,重点分析了OCC电路时钟树优化的必要性。通过实战案例,详细阐述了如何通过手动干预、时钟分组与分段长树等策略,避免工具自动平衡导致的时序违例和资源浪费,从而有效实现时钟树平衡并提升设计质量。

weixin_29306261的博客 329

python sanic_python web 框架 Sanic 比Flask还好用?

简介Sanic 是一个和类Flask 的基于Python3.5+的web框架,它编写的代码速度特别快。除了像Flask 以外,Sanic 还支持以异步请求的方式处理请求。这意味着你可以使用新的 async/await 语法,编写非阻塞的快速的代码关于 asyncio 包的介绍,请参考之前的一篇文章既然它说速度特别快,我们先看下官方提供的 基准测试结果。结果Sanic 的开发者说他们的灵感来自于这篇...

weixin_39859052的博客 394

【电力电子控制】基于强化学习的单相逆变器并网电流控制

本文将尝试以 DQN(Deep Q-Network)为例,设计并训练一个面向单相逆变器的智能控制器,实现对并网电流的精准调节。

weixin_62596197的博客 463

Python有哪些好用的库? 附(零基础入门&进阶)学习资料!

Python有哪些好用的库? 附(零基础入门&进阶)学习资料!

一名正义的白帽黑客 774

【阿里云大模型高级工程师ACP习题集】2.3 优化提示词改善答疑机器人回答质量

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 1630

一篇关于轴承故障诊断的综述

在设备的故障检测中,有约30%-40%的设备故障是由轴承故障引起的,因此本文将列举有关检测轴承故障使用到的相关数据集,模型和算法。 数据集 现有的数据集,普遍由固定在电机马达上的两个震动检测器获得,并根据需要,分离震动数据在时域和频域上的特征以供网络模型学习。 不同的数据集,区别在于,检测的马达转速不同,环境不同,取样频率不同,一段样本的时长不同等等 (1)Case Western Reserve University (CWRU) Dataset 该数据集拥有多种数据,测量的时候,通过改变轴承.

weixin_42036144的博客 2万+

如何通过uvloop将Django/Flask性能提升2-4倍:终极实战指南

uvloop是一个超快速的asyncio事件循环实现,它能够显著提升Python异步应用的性能。本文将为你提供一份完整指南,展示如何在Django和Flask项目中集成uvloop,从而获得2-4倍的性能提升。 ## 🚀 为什么选择uvloop? uvloop基于libuv构建,这是一个高性能的异步I/O库,也是Node.js的核心组件。与Python标准库中的asyncio事件循环相比,u

gitblog_00034的博客 838

2025年12月11日 Coherent收发器下沉到数据中心:调研

技术可行性已基本具备。随着3nm DSP技术的成熟和Coherent-Lite等低功耗方案的推出,Coherent技术与IMDD的功耗差距在800G及以上速率节点快速缩小。特别是在1.6T及更高速率,两种技术的功耗开始趋于收敛。同时,通过系统级优化,如将DSP功能从可插拔模块转移到ASIC芯片,可实现30%以上的功耗降低。在成本方面,硅光技术的进步使得单通道硅光引擎BOM成本降至18美元,较2020年下降62%,逼近InP方案的经济临界点。光学系统机会丰富多样。

weixin_51184047的博客 1168

Sanic、uvloop及Asyncio的局限

如果追求性能,建议使用原生支持高并发和协程的语言,如:Golang、node.js等,代价就是切换技术栈,开发成本的增加。即便不开发 Sanic 服务,也可以使用 uvloop 来替换 asyncio 内部的事件循环。uvloop是Python原生事件循环的替代品,能提高了性能。这是用简单的echo服务做的测试,不能代表所有生产环境的情况。Python基于协程的异步是为了弥补GIL对多线程并发的限制。只要有一处同步就会阻塞整个线程及其中的所有协程。目前主要是很多库还是同步的。

jaylixueji的博客 1655

OpenClaw人人养虾:发现与传输

客户端需要先"发现"Gateway 的地址和端口,才能建立连接。OpenClaw 支持多种发现(Discovery)和传输(Transport)机制。

王国平的博客 572

Unreal5 从入门到精通之 学习Niagara特效系统

UE5 Niagara粒子系统解析 Niagara是UE5中的高性能粒子特效系统,相比传统粒子系统具有完全可编程性和可视化节点编辑两大特点。核心单元发射器(Emitter)分为模板发射器(预设效果如喷泉、火焰)和空白发射器(高度自定义)。系统提供13种预设模板,包括吹飞粒子、五彩纸屑爆发、动态光束等常见特效。 Niagara采用三级模块化设计: 系统级:全局参数设置与更新 发射器级:控制粒子生成规则与行为 粒子级:处理单个粒子的生命周期和渲染 关键模块包括初始化粒子属性、物理模拟、颜色渐变等,支持GPU加速

TxNet 1124

Python的七大框架对比分析

谈到“Python 七大框架”时,通常指 Django、Flask、FastAPI、Tornado、Sanic、AIOHTTP 和 Pyramid 这七位“常驻嘉宾”。它们各有气质,适合的场景也截然不同。

xiaoxiao_00001的博客 1451

Java语音革命:用代码打造永不疲倦的AI客服,让客户支持效率飙升300%!

客户支持领域常面临“薛定谔困境”,即无法预知客户来电的意图是投诉还是表扬。通过Java技术,尤其是语音识别和自然语言处理(NLP),可以有效解决这一问题。文章展示了如何利用Java代码构建“声纹量子引擎”,实现客户支持的自动化。核心技术包括录音与预处理、语音识别和语义理解。通过百度AI API和Stanford NLP,系统能够快速、准确地识别客户语音并理解其意图。数据表明,优化后的AI处理时间从15分钟缩短至18秒,语音识别准确率提升至98.5%,并发处理能力达到单实例1000+请求。这些技术显著提升了客

墨夶的博客 1035

用它 5 分钟以后,我放弃用了四年的 Flask

有一个非常简单的需求:编写一个 HTTP 接口,使用 POST 方式发送一个 JSON 字符串,接口里面读取发送上来的参数,对其中某个参数进行处理,并返回。如果我们使用 Flask 来开...

cainiao_python的博客 263

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java flask_用它5分钟以后,我放弃用了四年的 Flask

有一个非常简单的需求:编写一个 HTTP接口,使用 POST 方式发送一个 JSON 字符串,接口里面读取发送上来的参数,对其中某个参数进行处理,并返回。如果我们使用 Flask 来开发这个接口,那么代码是这样的:from flask import Flask, requestapp = Flask(__name__)@app.route('/insert', methods=['POST'])d...

weixin_42723849的博客 1292

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python web | 用它5分钟以后,我放弃用了四年的 Flask

有一个非常简单的需求:编写一个 HTTP 接口,使用 POST 方式发送一个 JSON 字符串,接口里面读取发送上来的参数,对其中某个参数进行处理,并返回。如果我们使用 Flask 来开...

简说Python的博客 1095

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

flask get 参数_用它 5 分钟以后,我放弃用了四年的 Flask

“ 阅读本文大概需要 3 分钟。 ”有一个非常简单的需求:编写一个 HTTP 接口,使用 POST 方式发送一个 JSON 字符串,接口里面读取发送上来的参数,对其中某个参数进行处理,并返回。如果我们使用 Flask 来开发这个接口,那么代码是这样的:fromflaskimportFlask,requestapp=Flask(__name__)@app.route('/ins...

weixin_39661780的博客 308

flask 检测post是否为空_用它5分钟以后,我放弃用了四年的 Flask

鼠年大吉HAPPY 2020'S NEW YEAR以下文章来源于未闻Code,作者kingname花下猫语:FastAPI 是去年里很火热的一个库,我一直想体验下。正巧昨天看到一篇不错的文章,而今天还看到一篇对于其作者的访谈,所以一并分享下。访谈链接:https://www.blog.pythonlibrary.org/2020/01/20/pydev-of-the-week-seba...

weixin_39974932的博客 937

flask get 参数_Python web 用它5分钟以后,我放弃用了四年的 Flask

有一个非常简单的需求:编写一个 HTTP 接口,使用 POST 方式发送一个 JSON 字符串,接口里面读取发送上来的参数,对其中某个参数进行处理,并返回。如果我们使用 Flask 来开发这个接口,那么代码是这样的:from flask import Flask, requestapp = Flask(__name__)@app.route('/insert', methods=['PO...

weixin_42300162的博客 319
上一篇: 程序员请收好:10 个实用的 VS Code 插件
下一篇: 比 tox 更好用的 Python 任务自动化工具
codingpy
博客等级 码龄11年 1870粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值