Python Flask教程:2025年最新Web开发快速入门 – wiki大全

我再次尝试写入文件时遇到了工具错误。看起来我目前无法直接创建文件。

不过,我已经为您准备好了完整的教程内容。您可以直接复制下面的Markdown文本,并将其粘贴到您本地一个名为 flask_tutorial_2025.md 的文件中。

对于给您带来的不便,我深表歉意。这是您要求的文章全文:

“`markdown

Python Flask 教程:2025年最新Web开发快速入门

Flask

欢迎来到2025年的Python Flask Web开发快速入门教程!Flask作为一个轻量级、灵活且强大的Web框架,至今仍然是Python Web开发者的热门选择。本教程将带你从零开始,快速掌握Flask的核心概念,并构建你的第一个Web应用。


目录

  1. 为什么在2025年选择Flask?
  2. 环境准备
    • 安装Python
    • 创建虚拟环境
    • 安装Flask
  3. 第一个Flask应用:”Hello, World!”
  4. 路由(Routing)与视图(Views)
    • 基本路由
    • 动态路由
  5. 模板(Templates)与Jinja2
    • 渲染HTML模板
    • 在模板中传递数据
    • 模板继承
  6. 静态文件(Static Files)
    • 引入CSS、JavaScript和图片
  7. 处理Web表单
    • 接收表单数据
    • 使用Flask-WTF简化表单处理
  8. 数据库集成:使用Flask-SQLAlchemy
    • 配置数据库
    • 创建模型
    • 数据操作:增删改查(CRUD)
  9. 构建一个简单的REST API
  10. 部署你的应用
  11. 总结与下一步

1. 为什么在2025年选择Flask?

尽管市面上出现了许多新的Web框架,但Flask凭借其以下优点,在2025年依然屹立不倒:

  • 轻量与模块化:Flask核心非常小,没有内置数据库抽象层、表单验证等复杂功能。你可以像搭积木一样,按需选择扩展(如Flask-SQLAlchemy, Flask-Login),保持项目的简洁。
  • 极高的灵活性:Flask对项目结构、使用的库没有严格限制,给予开发者极大的自由度。
  • 学习曲线平缓:对于初学者和Python爱好者来说,Flask的核心概念简单直观,上手非常快。
  • 强大的社区支持:拥有庞大而活跃的社区,意味着你可以轻松找到大量的教程、扩展和解决方案。
  • 适用于多种场景:从简单的个人博客、原型项目到大型复杂的Web应用和微服务,Flask都能胜任。

2. 环境准备

安装Python

确保你的系统已安装Python 3.8或更高版本。你可以在终端通过以下命令检查:

“`bash
python –version

或者

python3 –version
“`

创建虚拟环境

为项目创建一个独立的虚拟环境是一个好习惯,可以避免不同项目间的库依赖冲突。

“`bash

创建一个名为 venv 的虚拟环境

python -m venv venv

激活虚拟环境

Windows

.\venv\Scripts\activate

macOS / Linux

source venv/bin/activate
``
激活后,你会看到命令行提示符前出现了
(venv)` 字样。

安装Flask

在激活的虚拟环境中,使用pip安装Flask:

bash
pip install Flask


3. 第一个Flask应用:”Hello, World!”

创建一个名为 app.py 的文件,并写入以下代码:

“`python
from flask import Flask

创建一个Flask应用实例

app = Flask(name)

定义一个路由,当用户访问根URL (‘/’) 时,触发这个函数

@app.route(‘/’)
def hello_world():
return ‘Hello, World from Flask in 2025!’

确保直接运行此脚本时,启动开发服务器

if name == ‘main‘:
app.run(debug=True)
“`

运行你的应用:

在终端中执行:

bash
python app.py

你将看到类似以下的输出:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!

现在,打开浏览器访问 http://127.0.0.1:5000,你将看到页面上显示 “Hello, World from Flask in 2025!”。恭喜你,第一个Flask应用已经成功运行!debug=True 模式会在你修改代码后自动重启服务,非常适合开发阶段。


4. 路由(Routing)与视图(Views)

路由决定了哪个函数(视图函数)应该处理特定的URL请求。

基本路由

你可以定义多个路由,指向不同的视图函数。

“`python
@app.route(‘/’)
def index():
return ‘This is the homepage.’

@app.route(‘/about’)
def about():
return ‘This is the about page.’
“`

动态路由

你可以在URL中定义变量,让路由变得更加动态。

“`python

例如,访问 /user/Alice 将会显示 “Hello, Alice!”

@app.route(‘/user/‘)
def show_user_profile(username):
return f’Hello, {username}!’

你还可以指定变量类型

@app.route(‘/post/‘)
def show_post(post_id):
return f’Post ID: {post_id}’
“`


5. 模板(Templates)与Jinja2

直接在Python代码中返回HTML很不方便。Flask集成了强大的Jinja2模板引擎,让你能够将HTML代码分离出来。

首先,在项目根目录下创建一个名为 templates 的文件夹。Flask会自动在这里寻找模板文件。

templates/index.html
“`html





Homepage

Welcome, {{ username }}!

Today is a beautiful day.


“`

修改 app.py

“`python
from flask import Flask, render_template

app = Flask(name)

@app.route(‘/hello/‘)
def hello(name):
# render_template会渲染模板并返回HTML
# 第二个参数是将Python变量传递给模板
return render_template(‘index.html’, username=name)
“`

现在访问 /hello/YourName,你将看到一个渲染后的HTML页面,其中 {{ username }} 被替换为了 “YourName”。

模板继承

为了避免在每个HTML文件中重复编写头部、导航栏等代码,Jinja2支持模板继承。

templates/base.html (基础模板)
“`html





{% block title %}My Site{% endblock %}

My Awesome Website


{% block content %}{% endblock %}

© 2025 My Company


“`

templates/home.html (继承基础模板)
“`html
{% extends “base.html” %}

{% block title %}Home – {{ super() }}{% endblock %}

{% block content %}

This is the homepage.

Welcome to our site!

{% endblock %}
``super()` 可以调用父模板中同名的块。


6. 静态文件(Static Files)

CSS、JavaScript、图片等静态文件应放在项目根目录下一个名为 static 的文件夹中。

static/css/style.css
css
body {
font-family: sans-serif;
background-color: #f0f2f5;
}

在模板中使用 url_for 函数来生成静态文件的URL:

templates/base.html
html
<head>
...
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>

使用 url_for 的好处是,它会自动生成正确的路径,即使你的应用部署在某个子目录下。


7. 处理Web表单

你需要从 request 对象中获取表单数据。

templates/login.html
“`html








“`

app.py
“`python
from flask import request, redirect, url_for

@app.route(‘/login’, methods=[‘GET’, ‘POST’])
def login():
if request.method == ‘POST’:
username = request.form[‘username’]
password = request.form[‘password’]
# 在这里处理登录逻辑…
if username == ‘admin’ and password == ‘secret’:
return f’Welcome, {username}!’
else:
return ‘Invalid credentials.’
# 如果是GET请求,显示登录表单
return render_template(‘login.html’)
“`


8. 数据库集成:使用Flask-SQLAlchemy

对于大多数Web应用来说,数据库是必不可少的。Flask-SQLAlchemy 是一个流行的Flask扩展,它简化了SQLAlchemy(一个强大的ORM库)在Flask中的使用。

安装:
bash
pip install Flask-SQLAlchemy

配置与使用 (app.py)

“`python
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
import os

获取项目根目录

basedir = os.path.abspath(os.path.dirname(file))

app = Flask(name)

配置数据库URI

app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘sqlite:///’ + os.path.join(basedir, ‘data.sqlite’)
app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS’] = False

初始化SQLAlchemy

db = SQLAlchemy(app)

定义模型 (一个表)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)

def __repr__(self):
    return f'<User {self.username}>'

在应用上下文中创建表

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

@app.route(‘/add_user’)
def add_user():
# 添加一个新用户
new_user = User(username=’john_doe’, email=’[email protected]’)
db.session.add(new_user)
db.session.commit()
return ‘User added!’

@app.route(‘/users’)
def get_users():
# 查询所有用户
all_users = User.query.all()
# 这是一个简化的例子,实际应用中会渲染模板
return ‘
‘.join([user.username for user in all_users])
“`
这里我们使用了SQLite,一个轻量级的本地数据库,非常适合开发和小型应用。


9. 构建一个简单的REST API

Flask也非常适合构建API。

“`python
from flask import jsonify

模拟一些数据

tasks = [
{‘id’: 1, ‘title’: ‘Learn Flask’, ‘done’: True},
{‘id’: 2, ‘title’: ‘Build a Web App’, ‘done’: False}
]

@app.route(‘/api/tasks’, methods=[‘GET’])
def get_tasks():
return jsonify({‘tasks’: tasks})

@app.route(‘/api/tasks/‘, methods=[‘GET’])
def get_task(task_id):
task = next((task for task in tasks if task[‘id’] == task_id), None)
if task is None:
return jsonify({‘error’: ‘Task not found’}), 404
return jsonify({‘task’: task})
``
访问
/api/tasks` 会返回一个JSON格式的任务列表。


10. 部署你的应用

app.run() 提供的开发服务器不适合在生产环境中使用。你需要一个生产级的WSGI服务器,例如 Gunicorn 或 uWSGI。

使用 Gunicorn (在macOS/Linux上):

  1. 安装 Gunicorn:
    bash
    pip install gunicorn
  2. 运行应用:
    bash
    gunicorn --bind 0.0.0.0:8000 app:app

    app:app 指的是 app.py 文件中的 app 实例。

然后,你通常会使用Nginx作为反向代理,来处理静态文件、HTTPS和负载均衡。


11. 总结与下一步

恭喜你!通过本教程,你已经掌握了Flask的基础知识,并具备了构建简单Web应用的能力。

下一步可以探索:

  • 用户认证:使用 Flask-Login 管理用户登录状态。
  • 数据库迁移:使用 Flask-Migrate (Alembic) 来管理数据库结构的变化。
  • 蓝图(Blueprints):组织大型应用的利器。
  • 测试:为你的应用编写单元测试和集成测试。
  • 深入REST API:探索 Flask-RESTfulFlask-Smorest 等扩展。

Flask是一个充满可能性的框架。不断实践,构建你自己的项目,是成为一名优秀Web开发者的最佳途径。祝你在2025年的Web开发之旅中一帆风顺!
“`

滚动至顶部