news 2026/8/29 6:28:38

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/8/26 10:44:44

企业级HOST配置实战:从零搭建开发测试环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个企业级HOST配置管理工具&#xff0c;功能包括&#xff1a;1.环境分组&#xff08;dev/test/prod&#xff09; 2.冲突检测 3.变更历史记录 4.团队协作编辑 5.快速切换配置方…

作者头像 李华
网站建设 2026/8/29 5:52:47

Z-Image-Turbo情绪映射:快乐、悲伤、愤怒的色彩表达

Z-Image-Turbo情绪映射&#xff1a;快乐、悲伤、愤怒的色彩表达 情绪驱动图像生成的技术背景与创新价值 在AI艺术创作领域&#xff0c;图像不再仅仅是视觉内容的输出&#xff0c;更成为情感表达的载体。阿里通义实验室推出的Z-Image-Turbo WebUI&#xff0c;作为一款基于扩散…

作者头像 李华
网站建设 2026/8/29 5:52:47

零基础学16进制颜色:从入门到精通

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式16进制颜色学习应用&#xff0c;通过小游戏方式教学。包含颜色选择器、简单填色游戏、颜色匹配测试等功能。每个环节都有详细说明和即时反馈。要求界面友好&#xf…

作者头像 李华
网站建设 2026/8/29 5:52:47

实验室安全监管系统建设方案(Word)

第一章 系统方案总览1.1 应用背景 1.2 业务现状与需求分析1.2.1 业务需求1.2.2 系统需求1.3 总体目标第二章 设计基础2.1 设计原则与标准 2.2 设计思路第三章 系统设计概览3.1 应用架构 3.2 系统拓扑 3.3 用户价值第四章 核心应用模块4.1 人员安全管控4.1.1 高清视频监控与准入…

作者头像 李华
网站建设 2026/8/29 6:03:12

金运环球:金价迎多重考验,早盘聚焦指数调仓引发的波动

【市场早间简述】日内贵金属市场面临多重技术性压力与基本面变化。委内瑞拉危机通过外交途径显著缓和&#xff0c;导致避险情绪降温。与此同时&#xff0c;彭博商品指数启动年度权重调整&#xff0c;将带来被动卖盘压力。现货黄金与白银预计将在关键技术区间内震荡整理&#xf…

作者头像 李华
网站建设 2026/8/29 6:03:12

抖音电商平台对大学生消费决策行为的影响研究(源码+万字报告+讲解)(支持资料、图片参考_相关定制)

抖音电商平台对大学生消费决策行为的影响研究 目录 抖音电商平台对大学生消费决策行为的影响研究 1 一、绪论 3 第一节 研究背景、目的及意义 3 一、 研究背景 3 二、 研究目的和研究意义 3 第二节 研究现状 4 一、 关于社交电商的国内外研究现状 4 二、 关于抖音的国内外研究现…

作者头像 李华