你好!很高兴为你提供 Flask 教程。
Flask 是一个用 Python 编写的轻量级 Web 应用框架。它被称为“微框架”,因为它核心简单,但可以通过扩展轻松添加功能(如数据库集成、表单验证等)。
本教程将带你从零开始,构建一个简单的 Flask 应用。
📋 目录
1. 环境准备
确保你已安装 Python(建议 3.8+)。
创建虚拟环境(推荐)
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate安装 Flask
pip install flask2. 第一个 Flask 应用
创建一个文件 app.py:
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)运行应用:
python app.py在浏览器中访问 http://127.0.0.1:5000/,你将看到 Hello, Flask!。
3. 路由与变量规则
你可以动态地将 URL 的一部分作为参数传递给视图函数。
@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(默认)intfloatpath(类似 string,但接受斜杠)uuid
4. HTTP 方法
默认情况下,路由只响应 GET 请求。你可以指定其他方法。
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
<!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:在视图中渲染模板
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 文件夹中。
项目结构:
/myproject
/static
style.css
/templates
index.html
app.py在模板中引用静态文件:
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">7. 请求对象与表单处理
使用 request 对象获取客户端发送的数据。
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. 重定向与错误处理
重定向
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!'自定义错误页面
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html'), 4049. 项目结构最佳实践
对于小型应用,单个文件即可。但对于中型以上项目,建议使用蓝图(Blueprints)模块化组织代码。
推荐结构:
/myflaskapp
/app
__init__.py # 创建 Flask 实例和注册蓝图
/routes
main.py # 主页面路由
auth.py # 认证相关路由
/models # 数据库模型
/templates # 模板文件
/static # 静态文件
config.py # 配置文件
run.py # 入口文件示例:使用蓝图
app/routes/main.py:
from flask import Blueprint
main_bp = Blueprint('main', __name__)
@main_bp.route('/')
def index():
return 'Home Page'app/__init__.py:
from flask import Flask
from app.routes.main import main_bp
def create_app():
app = Flask(__name__)
app.register_blueprint(main_bp)
return apprun.py:
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)🔌 常用扩展推荐
Flask 本身很精简,实际开发中常配合以下扩展:
| 扩展 | 用途 |
|---|---|
| Flask-SQLAlchemy | ORM 数据库操作 |
| Flask-Migrate | 数据库迁移管理 |
| Flask-WTF | 表单验证与 CSRF 保护 |
| Flask-Login | 用户会话管理 |
| Flask-RESTful | 构建 REST API |
| Flask-CORS | 跨域资源共享支持 |
✅ 下一步建议
- 学习如何连接数据库(SQLite/MySQL/PostgreSQL)。
- 实现用户登录/注册系统。
- 部署到生产环境(推荐使用 Gunicorn + Nginx)。
如果你有具体问题或想深入某个部分(如数据库集成),欢迎继续提问!