Flask 的详细使用指南,涵盖基础搭建、路由、模板、数据库及扩展功能:
1. 安装与最小应用
bash
pip install flask创建 app.py:
python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Flask!"
if __name__ == '__main__':
app.run(debug=True) # 开发模式运行:
bash
python app.py2. 项目结构(推荐)
myflask/
├── app/
│ ├── templates/ # Jinja2 模板
│ ├── static/ # CSS/JS 文件
│ ├── routes.py # 路由定义
│ └── models.py # 数据模型
├── config.py # 配置文件
└── run.py # 启动脚本3. 路由与请求处理
动态路由
python
@app.route('/user/<username>')
def show_user(username):
return f"User: {username}"
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f"Post ID: {post_id}"处理请求方法
python
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
return f"Welcome {username}!"
return render_template('login.html')4. 模板渲染(Jinja2)
基础模板(templates/base.html)
html
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>子模板(templates/index.html)
html
{% extends "base.html" %}
{% block title %}Home{% endblock %}
{% block content %}
<h1>Welcome, {{ user }}!</h1>
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% endblock %}5. 静态文件处理
html
<!-- 加载 CSS -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">6. 数据库集成(Flask-SQLAlchemy)
安装与配置
bash
pip install flask-sqlalchemyconfig.py:
python
class Config:
SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db'
SQLALCHEMY_TRACK_MODIFICATIONS = False初始化:
python
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)定义模型
python
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f"User('{self.username}', '{self.email}')"创建数据库:
python
with app.app_context():
db.create_all()7. 表单处理(Flask-WTF)
安装:
bash
pip install flask-wtf表单类:
python
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
submit = SubmitField('Sign Up')模板渲染:
html
<form method="POST">
{{ form.hidden_tag() }}
{{ form.username.label }} {{ form.username() }}
{{ form.email.label }} {{ form.email() }}
{{ form.submit() }}
</form>8. 用户认证(Flask-Login)
安装:
bash
pip install flask-login配置:
python
from flask_login import LoginManager, UserMixin, login_user
login_manager = LoginManager(app)
login_manager.login_view = 'login'
class User(UserMixin, db.Model):
# 继承之前的 User 模型并添加方法
def get_id(self):
return str(self.id)9. 部署(Gunicorn + Nginx)
安装 Gunicorn:
bash
pip install gunicorn启动服务:
bash
gunicorn -w 4 -b 0.0.0.0:8000 run:appNginx 配置参考 Django 部署部分(结构类似)。
10. 扩展推荐
| 扩展 | 用途 |
|---|---|
| Flask-RESTful | 快速构建 REST API |
| Flask-Migrate | 数据库迁移工具 |
| Flask-CORS | 跨域资源共享支持 |
11. 常见问题
调试模式安全隐患:
- 生产环境务必设置
debug=False。
- 生产环境务必设置
静态文件 404:
- 确保
static目录位于正确路径,检查url_for('static')生成路径。
- 确保
上下文错误:
- 在非请求上下文中操作数据库时,需手动推送应用上下文:python
with app.app_context(): db.create_all()
- 在非请求上下文中操作数据库时,需手动推送应用上下文:
Flask 以轻量灵活著称,适合快速开发小型项目或作为微服务框架。通过扩展可实现复杂功能,保持代码简洁可控。对于大型项目,建议结合工厂模式( create_app)和蓝本(Blueprint)组织代码。