Flask 教程

Flask 教程

你好!很高兴为你提供 Flask 教程。

Flask 是一个用 Python 编写的轻量级 Web 应用框架。它被称为“微框架”,因为它核心简单,但可以通过扩展轻松添加功能(如数据库集成、表单验证等)。

本教程将带你从零开始,构建一个简单的 Flask 应用。


📋 目录

  1. 环境准备
  2. 第一个 Flask 应用
  3. 路由与变量规则
  4. HTTP 方法
  5. 模板渲染 (Jinja2)
  6. 静态文件
  7. 请求对象与表单处理
  8. 重定向与错误处理
  9. 项目结构最佳实践

1. 环境准备

确保你已安装 Python(建议 3.8+)。

创建虚拟环境(推荐)

纯文本
plaintext
# 创建虚拟环境
python -m venv venv

# 激活虚拟环境
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate

安装 Flask

纯文本
plaintext
pip install flask

2. 第一个 Flask 应用

创建一个文件 app.py

纯文本
plaintext
from flask import Flask

# 创建 Flask 实例
# __name__ 用于确定根路径,以便 Flask 知道在哪里查找资源
app = Flask(__name__)

# 定义路由:当用户访问根 URL '/' 时触发
@app.route('/')
def hello_world():
    return 'Hello, Flask!'

if __name__ == '__main__':
    # 启动开发服务器
    # debug=True 允许代码修改后自动重载,并提供调试器
    app.run(debug=True)

运行应用:

纯文本
plaintext
python app.py

在浏览器中访问 http://127.0.0.1:5000/,你将看到 Hello, Flask!


3. 路由与变量规则

你可以动态地将 URL 的一部分作为参数传递给视图函数。

纯文本
plaintext
@app.route('/user/<username>')
def show_user_profile(username):
    # 显示该用户的个人主页
    return f'User: {username}'

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # int 转换器确保 post_id 是整数
    return f'Post ID: {post_id}'

支持的转换器:

  • string(默认)
  • int
  • float
  • path(类似 string,但接受斜杠)
  • uuid

4. HTTP 方法

默认情况下,路由只响应 GET 请求。你可以指定其他方法。

纯文本
plaintext
from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()

5. 模板渲染 (Jinja2)

Flask 使用 Jinja2 模板引擎。不要直接在 Python 代码中返回 HTML,而应使用模板。

步骤 1:创建模板文件夹

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

步骤 2:创建模板文件 templates/hello.html

纯文本
plaintext
<!doctype html>
<html>
<head><title>Hello</title></head>
<body>
    <h1>Hello, {{ name }}!</h1>
    {% if age %}
        <p>You are {{ age }} years old.</p>
    {% endif %}
</body>
</html>

步骤 3:在视图中渲染模板

纯文本
plaintext
from flask import render_template

@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name, age=25)

6. 静态文件

CSS、JavaScript 和图片等静态文件应放在 static 文件夹中。

项目结构:

纯文本
plaintext
/myproject
    /static
        style.css
    /templates
        index.html
    app.py

在模板中引用静态文件:

纯文本
plaintext
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

7. 请求对象与表单处理

使用 request 对象获取客户端发送的数据。

纯文本
plaintext
from flask import request, render_template_string

@app.route('/submit', methods=['POST'])
def submit():
    # 获取表单数据
    username = request.form.get('username')

    # 获取 URL 查询参数 (?key=value)
    page = request.args.get('page', 1)  # 默认值为 1

    # 获取 JSON 数据 (API 常用)
    data = request.get_json()

    return f'Received: {username}, Page: {page}'

8. 重定向与错误处理

重定向

纯文本
plaintext
from flask import redirect, url_for

@app.route('/old-page')
def old_page():
    return redirect(url_for('new_page'))  # 重定向到新路由

@app.route('/new-page')
def new_page():
    return 'This is the new page!'

自定义错误页面

纯文本
plaintext
@app.errorhandler(404)
def page_not_found(error):
    return render_template('404.html'), 404

9. 项目结构最佳实践

对于小型应用,单个文件即可。但对于中型以上项目,建议使用蓝图(Blueprints)模块化组织代码。

推荐结构:

纯文本
plaintext
/myflaskapp
    /app
        __init__.py      # 创建 Flask 实例和注册蓝图
        /routes
            main.py      # 主页面路由
            auth.py      # 认证相关路由
        /models          # 数据库模型
        /templates       # 模板文件
        /static          # 静态文件
    config.py            # 配置文件
    run.py               # 入口文件

示例:使用蓝图

app/routes/main.py:

纯文本
plaintext
from flask import Blueprint

main_bp = Blueprint('main', __name__)

@main_bp.route('/')
def index():
    return 'Home Page'

app/__init__.py:

纯文本
plaintext
from flask import Flask
from app.routes.main import main_bp

def create_app():
    app = Flask(__name__)
    app.register_blueprint(main_bp)
    return app

run.py:

纯文本
plaintext
from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)

🔌 常用扩展推荐

Flask 本身很精简,实际开发中常配合以下扩展:

扩展用途
Flask-SQLAlchemyORM 数据库操作
Flask-Migrate数据库迁移管理
Flask-WTF表单验证与 CSRF 保护
Flask-Login用户会话管理
Flask-RESTful构建 REST API
Flask-CORS跨域资源共享支持

✅ 下一步建议

  1. 学习如何连接数据库(SQLite/MySQL/PostgreSQL)。
  2. 实现用户登录/注册系统。
  3. 部署到生产环境(推荐使用 Gunicorn + Nginx)。

如果你有具体问题或想深入某个部分(如数据库集成),欢迎继续提问!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注