【python轻量级Web框架 Flask 】1 Flask 初识

【python轻量级Web框架 Flask 】1 Flask 初识

最近学💙深度学习,想要把小项目做成🌸网页化,第一次做python的网页开发,发现一个新大陆-✨Flask框架!今天的学习内容,一起来吧~

注:参考B站上武沛齐老师的Flask课程老师讲的真的非常好,都去听!!!

目录

1 FLask介绍

1.1 Flask 特点

1.2 Flask 核心组成

1.3 Flask 应用场景

2 快速实现 Flask 网页-DIY  

2.1 简单实现

2.2 Request

(1) 获取请求参数(Quesry Parameters)

(2) 获取表单数据(Form Data)

(3) 获取JSON数据(JSON API)

(4) 获取文件上传(Files)

2.3 视图函数的返回值

(1) 常见的返回类型

A. 字符串(String/HTML)

B. 字典与列表(自动转JSON)

C. 元组(Tuple) — — 自定义状态码

(2) Flask API 简单实现


1 FLask介绍

Flask 是 一个使用Python编写的轻量级Web框架。由于使用简单,用扩展增加其他功能,因此被称为“微框架”(Microsoftframework)

2026年的Python生态中,Flask 依然是构建 中小型应用、微服务和AI模型接口 的首选工具之一。

⭐️Flask的设计基于两个核心库:

Werkzeug:一个强大的SWGL(Web Server Gateway Interface)工具箱,负责处理HTTP请求和路由。

Jinja2:一个功能丰富的模板引擎,负责渲染HTML。

😕Flask “微”在哪里?

Flask不强制使用特定的数据库(如Django必须用其内置ORM)或表单验证工具,它只提供核心功能,剩下的插件(Falsk-SQLAlchemy,Flask-Login等)由用户根据需求自行选择。

1.1 Flask 特点

轻量级与简约:核心代码库非常小,提供了最基本的功能,不强制要求特定的工具或库;

灵活性:Flask提供了基本的框架结构,但没有强制性的项目布局或组件,开发者可以根据自己的需求自定义;

可扩展性:允许用户通过插件扩展来添加功能,eg. 表单处理、数据库交互或用户认证等,都可以通过社区提供的扩展来实现按;

易于调试:内置非常优雅的交互式调试器,报错信息清晰直观。

RESTful支持:Falsk支持 RESTful HTTP 请求处理,非常适合前后端分离架构。

局限性:大型项目需要手动搭建目录和配置,不想Django那样“开箱即用”。

1.2 Flask 核心组成

应用实例(Flask App):每个Flask应用的核心,负责初始化、配置、路由映射、错误处理和请求处理上下文;

路由(Routing):使用装饰器(@app.route())将URL映射到特定的视图函数;

视图函数(View Functions):处理接收到的HTTP请求并返回相应(HTML、JSON等);

Jinja2(模板引擎):负责渲染HTML页面,支持将后端数据佛动态嵌入到前端模板中;

请求和响应:Flask处理HTTP请求,支持多种HTTP方法(如GET、POST);

扩展模块(Extensions):用于增强功能,如数据库操作(Flask-SQLAlchemy)、表单验证(Flask-WTF)等。 

// 这里列举一些常见扩展:

Flask-SQLAlchemyFask-WTFFlask-LoginFlask-RESTfulFlask-MigrateFlask-CORS
数据库ORM表单处理用户认证REST API 开发数据迁移跨域支持

1.3 Flask 应用场景

以下是 Flask 典型的四大应用场景:

(1) 快速项目开发:对于小型的个人项目或初创项目,当你有一个初创想法,需要快速做出一套能够运行的Web系统向客户展示时。

// 场景:做一个简单的网站雏形、内部办公流程审批系统或个人作品集等;

优势:① 无负担:没有Django那样庞大的预设目录和数据库要求; ② 生态丰富:按需取用。

(2) 机器学习与AI模型部署:目前Flask最火热的赛道,由于大部分AI框架(eg.pytorch、TensoFlow、Scikit-learn)都是Pytho原生支持,Flask成为将这些模型包装成API接口的首选;

//场景:将训练好的模型加载到Flask中,通过HTTP接受图片或文字输入,返回预测结果。

优势:冷启动快,资源占用低,能够轻松集成到Docker容器中进行扩展。

(3) 微服务架构:在大型企业级应用中,开发者倾向于将功能拆分为多个小型、独立地服务。

// 场景:一个电商平台可能由“订单服务”“用户服务”“库存服务”组成,每一个服务都可以是一个独立的Flask应用;

优势:① 独立部署:修改订单逻辑不需要重启整个商城;② 技术栈自由:不同的微服务可以使用不同的数据库,Flask的非侵入性使其完美契合这一点。

(4) 数据分析与数据可视化:可以与科学计算库(如Numpy、Pandas)结合,用于开发数据分析和科学计算的Web应用。

//场景:结合Plotly Dash 或ECharts,展示公司业务指标、服务器监控状态或金融市场走势;

优势:开发周期短,能够快速将复杂的后台数据转化为直观的前端图表。

😆😆 了解了Flask的基本架构之后,继续学习吧!

2 快速实现 Flask 网页-DIY  

在此之前需要安装Flask的依赖包,在终端执行:(开发环境推荐:Pycharm、VS Code)

pip install Flask

2.1 简单实现

下面快速实现一个简单的网页:

首先创建一个app实例对象,通过 @app.route()-def fun() 的形式绑定指定url与对应的视图函数;

from flask import Flask # 创建按一个Flask实例对象 app = Flask(__name__) ''' user在网站上访问类了下面的地址,后端将自动执行相应的函数,函数的返回值将在浏览器渲染 ''' # http://127.0.0.1:5000 -> 执行index @app.route("/") def index(): return "Hello World!" # http://127.0.0.1:5000/login -> 执行login @app.route("/login") def login(): return "Please Login in!" if __name__ == '__main__': app.run()

// 运行效果:

terminal 会显示网页地址及端口号,访问指定网址以及前面定义好的路径,可以看到函数的返回值就显示在浏览器当中。

  

另外,可以在代码 app.run() 中自行指定访问地址以及端口号:

// 运行效果:

2.2 Request

🌴request 对象 是一个全局上下文对象,它包含了客户端发送给服务器的所有HTTP请求信息 。

要使用它,需要先从flask模块中导入:

from flask import request

下面是request对象中最常用的属性及其应用场景详解:

(1) 获取请求参数(Quesry Parameters)

通常我们在访问页面会看到这样的情况:.../index?age=21&pwd=123

后半部分实际上是用户传递的参数,在用户登录成功界面通常会如此显示。

在Flask当中通过 request 完成这种功能,通常用于GET请求,即URL中 ?后面的部分。

# http://127.0.0.1:5000/search -> 执行search # http://127.0.0.1:5000/search?keyword=flask框架&pwd=1 -> 执行search @app.route('/search') def search(): keyword = request.args.get('q') # 获取 'q' 的值 page = request.args.get('page', default=1, type=int) # 带默认值和类型转换 print(f"Searching for {keyword} on page {page}") return f"Searching for {keyword} on page {page}"

//运行效果:

   

(2) 获取表单数据(Form Data)

用于处理HTML<form> 提交的POST请求。

🎥补充:GET VS POST

GET和POST是HTTP协议中最常用的两种方法,决定了数据如何从客户端(浏览器/APP)传递到我们的Python后端。

— — 核心区别对照表:

— — 🌾🌾🌾 更加形象的理解:信封与明信片

GET- 明信片:信息写在背面,所有人(路由器、浏览器历史、中间代理)都能看到,它适合传递不敏感的小信息,比如“我要看第5页的内容”;

POST - 信封:信息封装在信封里面。虽然看不见内容,但如果不给信封加密(使用HTTPS),坏人还是可以拆开看。它适合传递敏感信息(如密码)或大宗信息(如上传文件)。

由于POST传递的数据形式是请求体,无法在代码中模拟出来,下面借助一个调试API的行业标准工具 — —🌵 Postman,可以用它模拟POST请求,并对应到代码逻辑。

Postman下载地址:https://www.postman.com/downloads/

@app.route('/login', methods=['POST']) def login(): # 从请求体中获取表单字段 username = request.form.get('username') password = request.form.get('password') return f"用户 {username} 尝试登录"

//运行效果:


🌗 混合模式:一个函数处理两种请求

在Flask实际开发中,我们通常把“显示页面(GET)”和“提交数据(POST)”写在同一个路由里:

@app.route('/contact', methods=['GET', 'POST']) def contact(): if request.method == 'POST': # 处理提交的表单 msg = request.form.get('message') return "感谢您的反馈!" # 如果是 GET,则渲染并返回联系表单页面 return render_template('contact_form.html')

(3) 获取JSON数据(JSON API)

表单数据也可以以 json 形式传递,在现代前后端分离开发(如Vue/React)或AI接口调用中常见。

//Postman操作方式:点击红框的位置:raw-JSON,输入JSON格式的数据。

点击Send,后台数据并login函数没有似乎没有接收到这个信息?

No,接收到了,但需要用匹配的形式-request.json.get() 获取:

(4) 获取文件上传(Files)

处理用户上传的图片、音频等。

@app.route('/upload', methods=['POST']) def upload_file(): f = request.files['photo'] f.save('./uploads/' + f.filename) return "File uploaded!"

2.3 视图函数的返回值

🎋 在前面的练习中我们返回的都是一个字符串,实际上,它们最终都会被Flask转换成一个

响应对象(Response Object)。Flask非常灵活,它允许返回多种格式的数据。

(1) 常见的返回类型

A. 字符串(String/HTML)

最简单的返回方式,Flask会将其自动包装成一个状态码为200、内容类型为text/html的响应。

@app.route('/') def index(): # return "Hello Flask!" return "<h1>Hello Flask!</h1>" # 浏览器会直接渲染 HTML

B. 字典与列表(自动转JSON)

有时候我们返回的虽然是字符串的形式,在Flask开发中,json.dumps()jsonif() 都能把Python对象转成JSON格式。

🌟区别在于前者是Python标准库提供的序列化工具,而后者是Flask框架特有的响应工具。

 a) json.dumps() ——“转换器”

负责把Python的字典/列表变成一个符合JSON格式的字符串。

b) jsonif — — “打包员”

Flask专门为Web开发设计,不仅做了序列化,还帮用户把“货”装进符合HTTP规范的“箱子”。

实际开发中,jsonify() 更为推荐,因为它支持直接传入多个命名参数,具有更强兼容性,并自动处理一些安全漏洞(如JSON注入攻击)。

在Flask 2.0+版本中,如果返回一个 dict 或 list,Flask会自动调用jsonify()。并将其Content-Type 设置为 application/json,这是编写API接口最常用的方式。


C. 元组(Tuple) — — 自定义状态码

如果用户想控制HTTP状态码(例如返回404或201),可以使用元组格式:

(响应体,状态码,响应头)

@app.route('/error') def error_demo(): # 返回内容, 状态码 return "页面未找到", 404 @app.route('/created') def create_data(): # 返回内容, 状态码, 响应头字典 return {"msg": "创建成功"}, 201, {"X-Custom-Header": "Flask-Demo"}

(2) Flask API 简单实现

在前面学习的基础上,我们可以简单实现一个Flask API开发的小案例,逻辑简单:

案例说明:这是一个典型的API签名生成服务——接收Client传来的字符串,通过特定的算法进行加密后(MD5 + 盐),返回结果。

import hashlib import json from flask import Flask, request, jsonify # 创建按一个Flask实例对象 app = Flask(__name__) @app.route("/bili", methods=["POST"]) def bili(): ordered_string = request.json.get('ordered_string') if not ordered_string: return jsonify({"status":False, "error":"参数错误1"}) # 调用算法,处理接收到的数据 encrypt_string = ordered_string + "123456789" obj = hashlib.md5(encrypt_string.encode('utf-8')) sign = obj.hexdigest() return jsonify({"status": True, 'data':sign}) if __name__ == '__main__': app.run()

// 运行效果:

😎 加密算法:

a) 加盐(Salting):
在原始字符串后拼接一个固定字符串。在计算机安全领域中称作“加盐”,目的是防止彩虹表攻击(即简单的MD5被破解)。

b) MD5 哈希:.encode('utf-8'):将字符串转为字节流,因为 hashlib 处理的是二进制数据。hashlib.md5(...):创建 MD5 对象。.hexdigest():将哈希结果转为常用的 32 位十六进制字符串

先学这一部分,今天就这样啦~~~

Read more

Flutter 组件 jerelo 适配鸿蒙 HarmonyOS 实战:JSON-RPC 2.0 通讯,构建高性能远程过程调用与边缘端分布式协同架构

Flutter 组件 jerelo 适配鸿蒙 HarmonyOS 实战:JSON-RPC 2.0 通讯,构建高性能远程过程调用与边缘端分布式协同架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 jerelo 适配鸿蒙 HarmonyOS 实战:JSON-RPC 2.0 通讯,构建高性能远程过程调用与边缘端分布式协同架构 前言 在鸿蒙(OpenHarmony)生态迈向工业 4.0、涉及海量边缘节点调度、分布式服务调用及跨端轻量级 RPC(Remote Procedure Call)互联的背景下,如何实现一套低开销、标准化且具备“方法导理”能力的通讯协议,已成为决定分布式系统协同效率的关键工程命题。在鸿蒙设备这类强调微内核架构与软总线高效吞吐的环境下,如果应用依然依赖沉重的 HTTP/REST 封装进行频繁的小报文交互,由于由于 HTTP 协议头的冗余性,极易由于由于“通讯开销过高”导致实时监控系统的响应滞后。 我们需要一种能够支持请求/响应对齐、具备通知(Notification)机制且符合

By Ne0inhk
Rust异步Web框架Axum的深入原理与高级用法

Rust异步Web框架Axum的深入原理与高级用法

Rust异步Web框架Axum的深入原理与高级用法 一、Axum框架的架构与核心组件 1.1 Axum框架的设计理念 💡Axum是基于Tokio异步运行时的Rust Web框架,由Tokio团队官方维护,具有以下核心设计理念: 1. 模块化与可扩展性:通过中间件、请求提取器和响应映射器等组件,实现高度模块化的架构,允许开发者根据需求灵活组合功能。 2. 类型安全:利用Rust的类型系统确保请求处理逻辑的正确性,减少运行时错误。 3. 异步优先:完全基于Tokio异步运行时,充分利用现代硬件的并发能力。 4. 低门槛:提供简单易用的API,同时保持足够的灵活性,适合不同经验水平的开发者。 1.2 Axum框架的核心组件 1.2.1 请求提取器 请求提取器负责从HTTP请求中提取所需的数据,如路径参数、查询参数、请求体等。Axum提供了多种内置的请求提取器,并允许开发者自定义提取器。 内置请求提取器示例: useaxum::{extract::Path,response::IntoResponse,routing::get,

By Ne0inhk
Flutter 三方库 health_connector_core 的鸿蒙化适配指南 - 实现具备跨平台标准的数据采集与同步架构、支持端侧健康指标建模与设备总线协同实战

Flutter 三方库 health_connector_core 的鸿蒙化适配指南 - 实现具备跨平台标准的数据采集与同步架构、支持端侧健康指标建模与设备总线协同实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 health_connector_core 的鸿蒙化适配指南 - 实现具备跨平台标准的数据采集与同步架构、支持端侧健康指标建模与设备总线协同实战 前言 在进行 Flutter for OpenHarmony 的运动健身、个人健康管理或数字疗法类应用开发时,如何统一管理来自不同传感器(如心率计、血糖仪、计步器)的异构数据?health_connector_core 是一款专注于健康数据标准化处理的底层库。它提供了从指标建模到数据聚合的完整逻辑框架。本文将探讨如何在鸿蒙端构建极致、严谨的健康数据中枢。 一、原直观解析 / 概念介绍 1.1 基础原理 health_connector_core 建立在“标准指标(Standard Metrics)”系统之上。它将杂乱无章的原生生理信号抽象为统一的 Record 模型。

By Ne0inhk
Spring AI :Java 生态原生 AI 框架入门指南

Spring AI :Java 生态原生 AI 框架入门指南

在大模型席卷全球的技术浪潮下,Java 开发者们迫切需要一款贴合自身生态、低门槛接入 AI 能力的框架。Spring AI 的出现,恰好填补了这一空白 —— 它并非简单移植 Python 生态的现有方案,而是深度遵循 Spring 设计哲学,为 Java 和 Spring 开发者打造了原生的 AI 开发框架。本文将从 Spring AI 的核心概念、核心特性出发,结合实际环境搭建与首个对话案例,带大家快速上手这款框架,解锁 Java 生态与 AI 融合的全新可能。 一、什么是 Spring AI? Spring AI 是面向 Java 和 Spring 生态的原生人工智能框架,其核心设计理念完全传承自 Spring:依赖注入、POJO

By Ne0inhk