news 2026/4/18 0:52:03

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/4/18 6:02:16

2007-2024年论文复刻:人工智能技术应用如何影响企业创新

资源介绍 一、数据介绍 数据名称&#xff1a;《管理世界》复刻&#xff1a;人工智能技术应用如何影响企业创新 数据范围&#xff1a;A股上市公司 时间范围&#xff1a;2007-2024年 样本数量&#xff1a;69941条 二、数据指标 三、参考文献 [1]李玉花,林雨昕,李丹丹.人工智…

作者头像 李华
网站建设 2026/4/18 2:30:01

M2FP模型模型压缩技术:减小体积保持精度

M2FP模型压缩技术&#xff1a;减小体积保持精度 &#x1f9e9; M2FP 多人人体解析服务概述 在当前计算机视觉领域&#xff0c;多人人体解析&#xff08;Multi-person Human Parsing&#xff09;正成为智能交互、虚拟试衣、安防监控等场景的核心技术之一。M2FP&#xff08;Mask2…

作者头像 李华
网站建设 2026/4/16 14:34:09

零基础学会Leaflet:你的第一个地图应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个适合新手的Leaflet教学项目&#xff0c;实现一个简单的城市景点地图。要求&#xff1a;1) 分步骤注释代码 2) 包含5个预设标记点 3) 点击标记显示简单信息 4) 添加一个基础…

作者头像 李华
网站建设 2026/4/1 6:23:43

智能监控升级:M2FP实现多人特征分析

智能监控升级&#xff1a;M2FP实现多人特征分析 &#x1f4cc; 引言&#xff1a;从单人识别到精细化人体解析的演进 传统智能监控系统多聚焦于目标检测与人脸识别&#xff0c;其输出结果通常局限于“画面中有人”或“此人是谁”的粗粒度判断。然而&#xff0c;在安防、行为分析…

作者头像 李华
网站建设 2026/4/16 19:27:45

M2FP vs 传统分割模型:在复杂场景下的性能对比测试

M2FP vs 传统分割模型&#xff1a;在复杂场景下的性能对比测试 &#x1f4cc; 引言&#xff1a;为何需要更强大的人体解析方案&#xff1f; 随着计算机视觉技术的深入发展&#xff0c;语义分割已从基础的物体识别迈向精细化的人体部位解析。尤其在虚拟试衣、智能安防、AR/VR交互…

作者头像 李华