Flask 入门教程

FreeGuideOnline 最新 2026-07-15
登录 ``` 处理登录的视图: ```python @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] # 这里处理验证逻辑 return f'欢迎,{username}' return render_template('login.html') ``` `request.form` 是一个类字典对象,包含 POST 的表单数据。

文件上传

表单设置 enctype="multipart/form-data",视图函数使用 request.files

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    if file:
        file.save('uploads/' + file.filename)
        return '上传成功'

Flask 配置管理

应用经常需要不同环境下的配置(如数据库地址、密钥)。Flask 通过 app.config 管理配置。

从对象加载配置

创建 config.py

class Config:
    SECRET_KEY = 'dev-secret-key'
    DEBUG = True

app.py 中:

app.config.from_object('config.Config')

然后可以通过 app.config['SECRET_KEY'] 访问。

其他加载方式

  • py 文件:app.config.from_pyfile('settings.py')
  • 从环境变量:app.config.from_envvar('FLASK_SETTINGS')

数据库集成:Flask-SQLAlchemy

虽然 Flask 不强制使用特定 ORM,但 Flask-SQLAlchemy 是最流行的扩展,它封装了 SQLAlchemy,让数据库操作更简单。

安装

pip install flask-sqlalchemy

配置与初始化

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'  # 使用 SQLite
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
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}>'

创建数据库表

进入 Python shell,执行:

from app import db
db.create_all()

增删改查示例

# 创建
user = User(username='alice', email='alice@example.com')
db.session.add(user)
db.session.commit()

# 读取
User.query.all()
User.query.filter_by(username='alice').first()

# 更新
user.email = 'new@example.com'
db.session.commit()

# 删除
db.session.delete(user)
db.session.commit()

在视图函数中使用这些操作,即可实现动态网页。

错误处理与调试

自定义错误页面

使用 @app.errorhandler 装饰器定制 404、500 等错误页面:

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

启动调试器

开发时务必保持 debug=True,它会显示详细的错误堆栈,并提供一个交互式调试器。生产环境请务必关闭 Debug 模式

部署建议

当你完成开发,需要部署到生产环境时,推荐使用以下组合:

  • WSGI 服务器:Gunicorn(Linux)或 Waitress(Windows)
  • 反向代理:Nginx 处理静态文件和 SSL
  • 环境管理:使用环境变量配置敏感信息,设置 FLASK_ENV=production

示例 Gunicorn 启动命令:

gunicorn -w 4 -b 127.0.0.1:8000 app:app