当我第一次接触 Flask 时,仅仅用了 5 行代码就写出了一个能运行的 Web 应用。这种简洁到近乎诗意的体验,让我瞬间理解了为什么它会成为开发者的心头好。不同于某些框架的大包大揽,Flask 就像一位留白高手,让开发者在自由的画布上挥洒创意。

一、准备工作:搭建开发环境
1. 安装 Python
首先确保你的电脑已安装 Python 3.6+。在终端输入:
bash
python --version
若未安装,可从Python 官网下载。
2. 安装 Flask
使用 pip 包管理器安装:
bash
pip install flask
二、第一个 Flask 应用:Hello World
创建一个名为app.py
的文件,输入以下代码:
python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, Flask!"
if __name__ == '__main__':
app.run(debug=True)
bash
python app.py
在浏览器访问http://localhost:5000
,你会看到 "Hello, Flask!" 的输出。
关键概念解释:
- Flask 对象 :
app = Flask(__name__)
创建应用实例 - 路由装饰器 :
@app.route('/')
定义 URL 路径 - 视图函数 :
home()
返回响应内容 - 调试模式 :
debug=True
开启热重载
三、深入理解请求 - 响应循环
当用户访问你的网站时,会发生以下步骤:
-
客户端发送请求
浏览器向服务器发送 HTTP 请求(如 GET、POST)
-
路由匹配
Flask 根据 URL 路径找到对应的视图函数
-
处理请求
视图函数生成响应内容(HTML、JSON 等)
-
返回响应
服务器将响应发送回客户端
示例:处理不同请求方法
python
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 验证逻辑
return f"登录成功,用户:{username}"
return """
<form method="POST">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
"""
四、动态路由与模板渲染
1. 动态路由参数
python
@app.route('/user/<username>')
def profile(username):
return f"用户资料:{username}"
访问http://localhost:5000/user/Alice
会显示 "用户资料:Alice"
2. 使用 Jinja2 模板
创建templates
目录,添加index.html
:
html
<!DOCTYPE html>
<html>
<head>
<title>Flask模板示例</title>
</head>
<body>
<h1>你好,{{ name }}!</h1>
<p>当前时间:{{ current_time }}</p>
</body>
</html>
修改视图函数:
python
from flask import render_template
from datetime import datetime
@app.route('/greet/<name>')
def greet(name):
return render_template('index.html',
name=name,
current_time=datetime.now())
五、与前端交互:表单处理
1. 使用 Flask-WTF 扩展
安装
bash
pip install flask-wtf
创建表单类(forms.py
):
python
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email
class LoginForm(FlaskForm):
email = StringField('邮箱', validators=[DataRequired(), Email()])
password = PasswordField('密码', validators=[DataRequired()])
submit = SubmitField('登录')
视图函数处理表单:
python
from flask import render_template, flash
from forms import LoginForm
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
# 处理表单数据
flash('登录成功!')
return redirect(url_for('home'))
return render_template('login.html', form=form)
模板渲染表单(templates/login.html
):
html
<form method="POST" novalidate>
{{ form.hidden_tag() }}
<div>
{{ form.email.label }}<br>
{{ form.email(size=32) }}
</div>
<div>
{{ form.password.label }}<br>
{{ form.password(size=32) }}
</div>
<div>{{ form.submit() }}</div>
</form>
六、数据存储:使用 SQLAlchemy
1. 安装依赖
bash
pip install flask-sqlalchemy
2. 配置数据库
python
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
3. 定义模型
python
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}>'
4. 数据库操作
python
# 创建所有表
db.create_all()
# 添加用户
new_user = User(username='john', email='[email protected]')
db.session.add(new_user)
db.session.commit()
# 查询用户
user = User.query.filter_by(username='john').first()
print(user.email)
七、部署到生产环境
1. 安装 Gunicorn:
pip install gunicorn
2.启动服务器
gunicorn -w 4 app:app
3.配置 Nginx(示例配置文件):
python
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
八、常见问题解答
-
404 错误:检查路由是否正确定义
-
表单验证失败 :确保模板中包含
form.hidden_tag()
-
数据库连接问题:确认数据库文件权限和路径正确
九、学习资源推荐
- Flask 官方文档
- 《Flask Web 开发:基于 Python 的 Web 应用开发实战》