news 2026/2/8 3:08:24

Python 学习教程(第2篇):用 Flask 开发你的第一个 Web 应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 学习教程(第2篇):用 Flask 开发你的第一个 Web 应用

第一章:安装 Flask

Flask 是一个轻量级的 Python Web 框架,适合初学者快速上手。

1.1 创建并激活虚拟环境(推荐)

在项目文件夹中执行:

python -m venv flask_env
  • Windows激活:
    flask_env\Scripts\activate
  • macOS / Linux激活:
    source flask_env/bin/activate

1.2 安装 Flask

pip install flask

验证安装:

python -c "import flask; print(flask.__version__)"

若输出版本号(如3.0.0),说明安装成功。


第二章:Hello World Web 应用

2.1 创建应用文件

新建文件app.py,输入以下代码:

from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello, World! 这是我的第一个 Flask 应用。" if __name__ == '__main__': app.run(debug=True)

2.2 运行应用

在终端执行:

python app.py

你会看到类似输出:

* Running on http://127.0.0.1:5000

打开浏览器,访问 http://127.0.0.1:5000,即可看到页面内容。

debug=True表示开启调试模式,代码修改后会自动重启服务器。


第三章:路由与动态 URL

3.1 基本路由

@app.route('/about') def about(): return "关于我们"

访问/about即可看到内容。

3.2 动态路由(传递参数)

@app.route('/user/<name>') def user(name): return f"你好,{name}!"

访问/user/张三,页面显示:“你好,张三!”

<name>是变量,Flask 会自动传入函数参数。


第四章:使用模板渲染 HTML

直接返回字符串不适合复杂页面。Flask 支持Jinja2 模板引擎

4.1 创建模板目录

在项目根目录下创建文件夹templates

4.2 编写 HTML 模板

templates中新建index.html

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>我的 Flask 应用</title> </head> <body> <h1>欢迎,{{ name }}!</h1> <p>当前时间:{{ time }}</p> </body> </html>

4.3 在视图中渲染模板

修改app.py

from flask import Flask, render_template from datetime import datetime app = Flask(__name__) @app.route('/hello/<name>') def hello(name): now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") return render_template('index.html', name=name, time=now) if __name__ == '__main__': app.run(debug=True)

访问/hello/李四,页面将动态显示名字和当前时间。


第五章:处理表单(GET 与 POST)

5.1 创建表单页面

新建templates/form.html

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>提交表单</title> </head> <body> <form method="POST"> <label>姓名:<input type="text" name="username" required></label><br><br> <button type="submit">提交</button> </form> </body> </html>

5.2 处理表单请求

修改app.py

from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) @app.route('/form', methods=['GET', 'POST']) def form(): if request.method == 'POST': username = request.form['username'] return f"你好,{username}!表单已提交。" return render_template('form.html') if __name__ == '__main__': app.run(debug=True)
  • methods=['GET', 'POST']允许两种请求方式
  • request.form获取 POST 提交的数据

访问/form,填写并提交表单,即可看到结果。


第六章:集成数据库(SQLite + SQLAlchemy)

我们将使用SQLite(无需单独安装)和SQLAlchemy(ORM 工具)。

6.1 安装依赖

pip install flask-sqlalchemy

6.2 配置数据库

修改app.py

from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy from datetime import datetime app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todos.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) # 定义模型 class Todo(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) done = db.Column(db.Boolean, default=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) def __repr__(self): return f'<Todo {self.title}>'

6.3 创建数据库表

在 Python 交互环境中执行一次(或写初始化脚本):

# 在 app.py 同目录下运行: # python # >>> from app import db # >>> db.create_all()

或者在app.py末尾临时添加(仅开发用):

with app.app_context(): db.create_all()

注意:正式项目应使用迁移工具(如 Flask-Migrate)。


第七章:完整项目 —— Web 版待办事项

我们将把上一篇的命令行待办事项升级为 Web 应用。

7.1 主页面:显示任务列表

@app.route('/') def index(): todos = Todo.query.all() return render_template('index.html', todos=todos)

7.2 创建模板templates/index.html

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>待办事项</title> <style> .done { text-decoration: line-through; color: #999; } </style> </head> <body> <h1>我的待办事项</h1> <!-- 添加任务表单 --> <form method="POST" action="/add"> <input type="text" name="title" placeholder="输入新任务" required> <button type="submit">添加</button> </form> <hr> <!-- 任务列表 --> {% for todo in todos %} <div> {% if todo.done %} <span class="done">{{ todo.title }}</span> {% else %} <span>{{ todo.title }}</span> {% endif %} <a href="/toggle/{{ todo.id }}">切换</a> <a href="/delete/{{ todo.id }}" onclick="return confirm('确定删除?')">删除</a> </div> {% endfor %} </body> </html>

7.3 添加任务

@app.route('/add', methods=['POST']) def add(): title = request.form['title'] new_todo = Todo(title=title) db.session.add(new_todo) db.session.commit() return redirect(url_for('index'))

7.4 切换完成状态

@app.route('/toggle/<int:id>') def toggle(id): todo = Todo.query.get_or_404(id) todo.done = not todo.done db.session.commit() return redirect(url_for('index'))

7.5 删除任务

@app.route('/delete/<int:id>') def delete(id): todo = Todo.query.get_or_404(id) db.session.delete(todo) db.session.commit() return redirect(url_for('index'))

7.6 完整app.py代码

from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy from datetime import datetime app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todos.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) class Todo(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) done = db.Column(db.Boolean, default=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) @app.route('/') def index(): todos = Todo.query.all() return render_template('index.html', todos=todos) @app.route('/add', methods=['POST']) def add(): title = request.form['title'] new_todo = Todo(title=title) db.session.add(new_todo) db.session.commit() return redirect(url_for('index')) @app.route('/toggle/<int:id>') def toggle(id): todo = Todo.query.get_or_404(id) todo.done = not todo.done db.session.commit() return redirect(url_for('index')) @app.route('/delete/<int:id>') def delete(id): todo = Todo.query.get_or_404(id) db.session.delete(todo) db.session.commit() return redirect(url_for('index')) if __name__ == '__main__': with app.app_context(): db.create_all() app.run(debug=True)

第八章:运行项目

  1. 确保已安装 Flask 和 Flask-SQLAlchemy
  2. 执行:
    python app.py
  3. 添加、切换、删除任务,数据将持久化保存在todos.db
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 10:14:49

外贸业务提效工具:客户邮件自动翻译并归档系统搭建

外贸业务提效工具&#xff1a;客户邮件自动翻译并归档系统搭建 在跨境贸易日益频繁的今天&#xff0c;外贸企业每天需要处理大量来自全球客户的英文邮件。语言障碍不仅影响沟通效率&#xff0c;还可能导致误解或错失商机。传统依赖人工翻译的方式耗时耗力&#xff0c;而通用翻译…

作者头像 李华
网站建设 2026/2/5 10:51:39

用MQTTFX快速验证物联网创意的3种方法

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个物联网原型验证工具包&#xff0c;包含&#xff1a;1)虚拟设备生成器&#xff1b;2)消息流可视化工具&#xff1b;3)数据模拟器&#xff1b;4)简单的规则引擎。要求能够与…

作者头像 李华
网站建设 2026/2/3 6:16:39

用JLINK快速验证嵌入式硬件设计

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于JLINK的硬件验证工具包&#xff0c;能够快速检测目标板的以下关键参数&#xff1a;1) 电源电压 2) 时钟信号 3) 复位电路 4) 基本外设功能。要求提供直观的检测结果展…

作者头像 李华
网站建设 2026/2/3 11:39:58

智能健身教练:基于M2FP的人体姿态分析与指导

智能健身教练&#xff1a;基于M2FP的人体姿态分析与指导 在智能健身系统中&#xff0c;精准的人体动作识别与姿态分析是实现个性化训练指导的核心前提。传统姿态估计算法多依赖关键点检测&#xff08;如OpenPose&#xff09;&#xff0c;虽能捕捉关节位置&#xff0c;但对身体…

作者头像 李华
网站建设 2026/2/3 19:36:42

智能直播优化:M2FP实时人像处理

智能直播优化&#xff1a;M2FP实时人像处理 在智能直播、虚拟背景替换、AR互动等场景中&#xff0c;高精度的人像语义分割是实现视觉增强的核心技术。传统方案多聚焦于单人前景提取&#xff0c;面对多人同框、肢体遮挡、复杂姿态时往往表现不佳。为此&#xff0c;ModelScope推出…

作者头像 李华
网站建设 2026/2/7 7:38:55

M2FP模型在AR游戏中的创新应用:实时角色交互

M2FP模型在AR游戏中的创新应用&#xff1a;实时角色交互 &#x1f9e9; M2FP 多人人体解析服务&#xff1a;技术背景与核心价值 增强现实&#xff08;AR&#xff09;游戏近年来发展迅猛&#xff0c;用户对沉浸感和互动性的要求不断提升。其中&#xff0c;实时角色交互成为提升用…

作者头像 李华