- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
本文基于 2023 年 Day 46 的学习内容展开:讲解如何用 Flask 这个微框架快速创建一个 Python Web 应用,以及如何通过 Flask-SQLAlchemy 操作 SQLite 数据库实现持久化存储。读完后,你将掌握 Flask 路由、应用实例与 ORM 模型定义的核心用法,并理解为什么理解 Web 应用的工作机制是 DevOps 自动化与部署的重要基础。
在 90 天 DevOps 学习路线中的位置
这篇文档处于 2023 年度 Python 系列的中段,承上启下:
- 前一日 Day 45 学习了 Python 的调试(pdb)、单元测试(unittest)与正则表达式(re)、datetime 库,为编写可维护的应用代码打下基础;
- Day 44 覆盖了数据结构(列表、元组、字典、集合)与面向对象编程(类、继承、多态),而本文的 SQLAlchemy 模型类正是 OOP 思想的直接应用;
- 完成本篇后,Day 47 将进一步带你用 Flask 构建一个支持 Markdown 的完整博客应用(含虚拟环境搭建、模板渲染与
pip install flask markdown的实操流程),是对本文基础知识的进阶实战。
Python 的 Web 开发生态
原文档的开篇给出一个基本判断:Python 在 Web 开发领域相当成熟,生态中存在大量框架与模块可供选择,其中Flask、Django、Pyramid是几个广为人知的代表。框架的选择取决于项目需求——每个框架都有各自的优势与劣势。
从仓库的后续内容看,作者选择了最轻量的 Flask 作为教学主线:它被称为 micro web framework(微型 Web 框架),易于学习和使用,提供了一种用 Python 创建 Web 应用与 API 的简单方式。这符合 DevOps 场景下"快速上手、可自动化部署"的选型偏好——应用结构越简单,后续打包、容器化与流水线部署就越容易。
使用 Flask 创建基础 Web 应用
原文档给出的最小可运行示例如下:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'逐行解读这段代码的工作机制:
from flask import Flask:导入 Flask 应用类;app = Flask(__name__):创建 Flask 应用实例。__name__参数告诉 Flask 应用所在的模块名,Flask 据此定位模板、静态资源等相对路径;@app.route('/'):路由装饰器,把 URL 路径/与下面的视图函数绑定。当用户访问根 URL 时,hello_world()函数被调用,并返回字符串'Hello, World!'作为 HTTP 响应体;- 该函数直接返回字符串,Flask 会将其包装为 HTTP 响应(默认 200 状态码)。
原文档对此的总结是:这段代码创建了一个 Flask 应用,并定义了根 URL(/)的单一路由。用户访问该 URL 时,hello_world()函数被调用并返回'Hello, World!'字符串。
在此基础上补充几个实战要点(结合 Day 47 中作者的运行方式):
- 运行方式:将代码保存为项目根目录下的
main.py(或app.py),执行python main.py(配合app.run()入口)或flask run启动开发服务器,默认监听http://127.0.0.1:5000; - 终端会明确提示 "This is a development server. Do not use it in a production deployment",即开发服务器仅用于本地开发,生产环境应使用 WSGI 服务器——这正是 DevOps 部署时需要关注的差异点;
- 依赖安装:通过
pip install flask安装框架本身,建议在独立的虚拟环境(python3 -m venv)中操作,这一点在 Day 47 的 Windows 与 Linux/MacOS 完整步骤中有演示。
使用 SQLAlchemy 操作数据库
大部分在线应用都需要某种持久化存储,Python 生态为此提供了多种模块与框架,文档中列举的流行选项包括Django ORM、Peewee、SQLAlchemy。下面以 SQLAlchemy(配合 Flask-SQLAlchemy 扩展)操作 SQLite 数据库为例:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) @app.route('/') def index(): users = User.query.all() return render_template('index.html', users=users)原文档说明:这段代码使用 SQLAlchemy 创建了 SQLite 数据库和 User 表;index()函数查询数据库中的所有用户,并将结果传递给模板进行渲染。逐部分深入:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db':这是 Flask-SQLAlchemy 的关键配置项,指定数据库连接字符串。sqlite:///test.db表示使用 SQLite 文件数据库,三个斜杠后为相对于应用 instance 目录的文件路径,即数据库文件生成在instance/test.db。更换数据库(如 PostgreSQL、MySQL)时只需替换该 URI 前缀,模型代码无需改动——这是选择 ORM 的核心收益之一;db = SQLAlchemy(app):初始化扩展并将其绑定到 Flask 应用,之后db对象承担了模型基类与查询入口两个角色;class User(db.Model):声明一个 ORM 模型,继承db.Model使其映射到数据库中的user表。db.Column(db.Integer, primary_key=True)定义自增主键id;db.Column(db.String(50))定义长度上限为 50 个字符的name列。可以看到,数据表的结构完全由 Python 类表达,这与 Day 44 的 OOP 内容一脉相承;User.query.all():ORM 查询接口,返回全部用户记录的列表;render_template('index.html', users=users):将查询结果users作为变量传入 Jinja2 模板渲染输出。
两个实际落地时需要注意的点:
- 原文示例中
render_template直接出现但未在文件头部导入,完整代码需补充from flask import Flask, render_template,并且需要准备好templates/index.html模板文件(Day 47 的博客应用演示了templates目录与模板文件的完整组织方式); - 首次运行前通常需要调用
db.create_all()让 SQLAlchemy 依据模型定义实际创建数据表,否则查询会因表不存在而失败。
对 DevOps 实践的意义
原文档的收尾点出了本篇内容与 DevOps 主线的关联:充分了解这些 Web 应用是如何工作的,会在 DevOps 实践中的自动化与部署环节对你有所帮助。这个判断的具体展开是:
- 理解路由、应用实例与数据库连接字符串等机制后,你才能正确编写应用的启动脚本、健康检查与依赖清单(requirements.txt),这是 Docker 化、CI 构建与部署脚本的前提;
- 数据库 URI 通过配置注入而非硬编码,正是 12-Factor 风格应用"配置与代码分离"的体现,使得同一份代码可以在开发、测试、生产环境间切换;
- 文档进一步指出进阶方向:深入学习如何用 Python 构建 API,并结合同类Serverless 技术(如 AWS Lambda、Azure Functions)部署应用。作者还提供了一个自己构建的 serverless 简历 API 的演示项目作为参考。
后续学习路径
- Day 44 - Python 数据结构与 OOP:理解 ORM 模型背后的面向对象基础;
- Day 45 - 调试、测试与正则表达式:编写可测试、可维护的应用代码;
- Day 47 - 用 Python 构建一个应用:把本文的 Flask 基础扩展为支持 Markdown 的完整博客应用,包含虚拟环境、依赖安装、模板与运行输出的完整实操。
按原文档的收尾,明天(Day 47)将继续 Python 应用构建主题,见 2023/day47.md。
- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
相关推荐
从零到跑通:把开源AI代码编辑器Void在本地跑起来
从零到跑通:把开源AI代码编辑器Void在本地跑起来 Void 是一款开源 AI 代码编辑器,Cursor 的自托管替代方案,适合想把编辑器、模型和代码数据都握
代码编辑器开发工具AI Agent人工智能Flask-SQLAlchemy快速入门:5个简单步骤搭建完整的数据库应用
Flask SQLAlchemy快速入门:5个简单步骤搭建完整的数据库应用 Flask SQLAlchemy是一个强大的扩展,为Flask应用程序添加了SQLA
后端ORMWindows虚拟显示器终极配置指南:三步完成部署的完整教程
Windows虚拟显示器终极配置指南:三步完成部署的完整教程 Virtual Display Driver项目为Windows 10/11用户提供了强大的虚拟显
驱动开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考