Python 编程实战 · 实用工具与库 — Flask 基础入门

作者:程序员爱钓鱼日期:2025/11/14

Flask 是 Python 生态中最灵活、最轻量的 Web 框架之一,非常适合快速构建接口、网站原型、后台服务等。它遵循 WSGI 标准,核心库极其简洁,但可以通过插件无限扩展。


1. Flask 基础概念

✔ Flask 是什么?

  • 一个 微框架(Micro Framework)
  • 默认只提供核心组件:路由、请求处理、模板、调试器
  • 需要什么功能就安装什么扩展(ORM、表单验证、JWT、数据库等)

✔ Flask 的优势

  • 代码简洁、上手快
  • 灵活度极高(不像 Django 那样有强约束)
  • 大量插件生态,如:
    • Flask-RESTful(构建 REST API)
    • Flask-SQLAlchemy(数据库 ORM)
    • Flask-Login(登录鉴权)
    • Flask-JWT-Extended(JWT)

2. Flask 环境搭建

1pip install flask
2

验证安装:

1import flask
2print(flask.__version__)
3

3. 第一个 Flask 项目

创建 app.py

1from flask import Flask
2
3app = Flask(__name__)
4
5@app.route('/')
6def index():
7    return "Hello Flask!"
8
9if __name__ == '__main__':
10    app.run(debug=True)
11

运行:

1python app.py
2

浏览器访问:

1http://127.0.0.1:5000/
2

4. 路由(Routing)

路由就是 URL 与函数的映射。

① 基本路由

1@app.route('/hello')
2def hello():
3    return "Hello!"
4

② 路由参数

1@app.route('/user/<name>')
2def get_user(name):
3    return f"User: {name}"
4

类型转换器:

1@app.route('/add/<int:a>/<int:b>')
2def add(a, b):
3    return str(a + b)
4

5. 请求与响应

Flask 提供 request 对象用于获取 HTTP 请求数据。

1from flask import request
2
3@app.route('/login', methods=['POST'])
4def login():
5    username = request.form.get('username')
6    return f"Welcome {username}"
7

✔ 获取不同数据来源:

来源写法
URL 参数request.args
表单数据request.form
JSON 数据request.json
文件上传request.files

示例:JSON 接口

1@app.route('/api/add', methods=['POST'])
2def api_add():
3    data = request.json
4    return {
5        "result": data["a"] + data["b"]
6    }
7

6. 返回 JSON 数据

推荐使用 jsonify

1from flask import jsonify
2
3@app.route('/info')
4def info():
5    return jsonify({"name": "Flask", "version": 2.0})
6

7. 模板渲染(Jinja2)

Flask 默认使用 Jinja2 模板引擎。

目录结构:

1project/
2  app.py
3  templates/
4    index.html
5

app.py

1from flask import render_template
2
3@app.route('/page')
4def page():
5    return render_template('index.html', title="首页")
6

index.html:

1<h1>{{ title }}</h1>
2

8. 静态文件(CSS/JS/图片)

默认路径:static/

1project/
2  static/
3    style.css
4

HTML 使用:

1<link rel="stylesheet" href="/static/style.css">
2

9. 项目结构推荐(小型项目)

1project/
2  app.py
3  templates/
4  static/
5  requirements.txt
6

10. Flask 扩展(常用)

功能扩展
ORMFlask-SQLAlchemy
登录鉴权Flask-Login
表单验证WTForms / Flask-WTF
REST APIFlask-RESTful
跨域Flask-Cors
JWTFlask-JWT-Extended

安装示例:

1pip install flask_sqlalchemy
2pip install flask_cors
3

11. 生产环境部署

开发环境用 Flask 自带的调试服务器即可,但生产环境应使用:

  • Gunicorn + Nginx(Linux)
  • Waitress(Windows)
  • Docker(最佳方案)

示例(Gunicorn):

1gunicorn -w 4 app:app
2

12. 实战练习:构建简易 REST API

1from flask import Flask, request, jsonify
2
3app = Flask(__name__)
4
5db = []
6
7@app.route('/items', methods=['GET'])
8def get_items():
9    return jsonify(db)
10
11@app.route('/items', methods=['POST'])
12def add_item():
13    item = request.json
14    db.append(item)
15    return jsonify({"msg": "added", "item": item})
16
17if __name__ == "__main__":
18    app.run(debug=True)
19

测试 POST 接口:

1POST /items
2{
3  "name": "apple",
4  "qty": 5
5}
6

总结

通过这篇内容,你已经掌握 Flask 的基础技能:

✔ 搭建 Flask 项目 ✔ 路由配置 ✔ 请求与响应 ✔ 处理 JSON / 表单 ✔ 模板引擎 ✔ 静态文件 ✔ 推荐项目结构 ✔ REST API 实战


Python 编程实战 · 实用工具与库 — Flask 基础入门》 是转载文章,点击查看原文


相关推荐


😎 Node.js 应用多阶段构建 Dockerfile 详解
你的人类朋友2025/11/12

前言 🍃 你好啊,我是你的人类朋友!✨ 本文主要来一起阅读一个高效的 Node.js 应用 Dockerfile。 在开始分析这个 Dockerfile 之前,先问大家一个问题:为什么这个 Dockerfile 要分两个阶段来构建,而不是直接复制所有文件然后安装依赖? 读完本文后,你就能找到答案! 😎 小贴士:如果你不懂啥是两段构建,问题不大,后面有解释,可以继续看。 下面展示的是一个用于部署 Node.js 应用的 Dockerfile,让我们先看看完整代码: FROM node:18


测试自动化Replay:让数据库迁移测试回归真实场景的一把“利器”
我是杰尼2025/11/10

测试自动化Replay:让数据库迁移测试回归真实场景的一把“利器” 在当前数据库国产化的大趋势下,越来越多的企业开始从传统进口数据库向国产数据库进行替代。然而,真正影响迁移进度的往往不是数据迁移本身,而是 测试验证环节。 如果测试不能覆盖真实业务场景,迁移后的系统上线后很可能出现: 性能明显下降 并发冲突和慢查询频发 数据一致性异常难以定位 很多企业迁移项目延期 1~3 个月,根本原因都指向了同一个问题:测试不够真实。 那么,是否有办法把“生产环境正在发生的真实行为”,直接搬进测试环境中来复


C++死锁深度解析:从成因到预防与避免
oioihoii2025/11/8

第一部分:什么是死锁? 死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。若无外力干涉,这些线程都将无法向前推进。 一个经典的死锁场景被称为 “哲学家就餐问题” :五位哲学家围坐一桌,每两人之间有一支筷子。哲学家要么思考,要么就餐。就餐时需要同时拿起左右两边的筷子。如果所有哲学家同时拿起左边的筷子,那么他们都会永远等待右边的筷子被释放,从而陷入死锁。 第二部分:死锁产生的四个必要条件(Coffman条件) 这四个条件必须同时满足,死锁才会发生。因此,我们的所有策略都


Python编程实战 · 基础入门篇 | 字典(dict)
程序员爱钓鱼2025/11/6

在 Python 的世界里,除了列表(list)和元组(tuple)这样的序列类型,还有一种更灵活的数据结构——字典(dict)。 如果说列表像“有序的货架”,那么字典就像“带标签的抽屉”:每个数据都有一个唯一的“名字”,叫做 键(key)。 字典是 Python 最常用、最强大的数据结构之一。它能高效地存储和查找数据,被广泛用于配置、数据映射、缓存、对象建模等场景。 一 什么是字典 字典(Dictionary)是一种 键值对(key-value) 的数据结构。 它以 键(key) 定位对应


(2)100天python从入门到拿捏
硅基工坊2025/11/1

Python 的主要运用领域 Python 是一种多用途的编程语言,广泛应用于许多不同的领域。以下是 Python 的一些主要运用领域,并附上使用 Python 的公司及其产品示例。 文章目录 Python 的主要运用领域1. Web 开发2. 数据科学与分析3. 机器学习与人工智能4. 自动化与脚本编程5. 爬虫与数据抓取6. 金融与量化分析7. 科学计算与工程8. 游戏开发9. 桌面应用开发10. 嵌入式与物联网(IoT) 1. Web 开发 领域简介:Pytho


Redis(93)Redis的数据加密机制是什么?
Victor3562025/10/30

Redis本身并没有内置的数据加密机制,不过可以通过一些外部技术和配置来确保数据在传输和存储时的安全性。以下是一些常见的做法: 传输层安全性(TLS/SSL): 使用TLS/SSL加密客户端和Redis服务器之间的通信。 磁盘加密: 使用操作系统级别的磁盘加密来加密存储在磁盘上的数据。 应用层加密: 在将数据存储到Redis之前,在应用程序中对数据进行加密。 1. 传输层安全性(TLS/SSL) Redis 6.0 及以上版本支持TLS/SSL。以下是如何配置TLS/SSL: 配


Redis(86)Redis缓存的命中率如何提高?
Victor3562025/10/27

提高Redis缓存的命中率是确保系统性能和稳定性的关键。以下是一些提高Redis缓存命中率的策略,以及相应的代码示例: 1. 合理设置缓存过期时间 设置合适的缓存过期时间可以防止缓存数据过时,同时减少缓存击穿的风险。根据数据的更新频率和访问模式,选择合适的过期时间。 示例代码: import redis.clients.jedis.Jedis; public class CacheExpirationExample { private Jedis jedis; public


前端仔的一次运维实践
yuanyxh2025/10/25

最近有反馈官网访问异常卡顿,查看 Portainer 面板发现官网后台的后端服务所依赖的 jdk、mysql 等 docker 容器在不断的奔溃重建,查询发现奔溃日志,交由后端排查。 后端反馈服务器磁盘不足导致 mysql 无法启动,后端访问连不上数据库导致的。 查询磁盘占用,发现官网的 nginx 日志文件占用近 20GB,删除后官网后端访问正常运行。 日志切分与压缩 为了避免日志持续增长占用磁盘空间,需要对日志进行管理,这里使用 linux 系统自带的 logrotate 日志管理工具实现自


云开发Copilot实战:零代码打造智能体小程序指南
腾讯云开发CloudBase2025/10/22

云开发Copilot借助AI技术,实现小程序和Web应用的低代码生成与优化,大幅降低开发门槛,提升效率。无需编码,用户可通过自然语言描述需求,快速创建并发布应用,适合初创团队和快速迭代场景。 简述云开发的功能及优势 你是否曾经设想过,有一天只需简单描述需求,就能生成一个完整的小程序或 Web 应用,甚至连一行代码都无需编写?在如今快速发展的技术浪潮中,低代码开发正在重新定义开发效率,而腾讯云的云开发 Copilot 正是其中的佼佼者。借助 AI 技术,它不仅能够迅速生成应用和页面,还能优化样式、


用 Python 揭秘 IP 地址背后的地理位置和信息
烛阴2025/10/21

准备工作:安装必备工具 首先,请确保你的Python环境中安装了requests库。 pip install requests 第一步:查询自己的公网 IP 信息 import requests import json # 向ipinfo.io发送请求,不带任何IP地址,它会默认查询你自己的IP url = "https://ipinfo.io/json" try: response = requests.get(url) response.raise_for_status

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0