一、Flask 基础应用案例
(一)项目搭建与初始化
- 环境准备
- 安装 Python 解释器,确保版本符合 Flask 要求,如 Python 3.6 及以上。
- 使用
pip
安装 Flask 库,命令为pip install flask
。 - 可以创建虚拟环境,如
python -m venv venv
,激活虚拟环境后再进行项目开发,避免依赖冲突。
- 项目结构规划
- 创建项目根目录,如
my_flask_project
。 - 在根目录下创建
app.py
作为 Flask 应用的主入口文件。 - 建立
templates
目录用于存放 HTML 模板文件,static
目录存放 CSS、JS 等静态文件。
- 创建项目根目录,如
- Flask 应用实例化
- 在
app.py
中导入 Flask 类,如from flask import Flask
。 - 创建 Flask 应用实例,
app = Flask(__name__)
,__name__
确保正确加载资源。 - 可设置应用的配置参数,如
app.config['DEBUG'] = True
开启调试模式。
- 在
(二)路由与视图函数
- 基本路由定义
- 使用
@app.route('/')
装饰器定义根路由,如@app.route('/') def index(): return 'Hello, World!'
。 - 可以定义带参数的路由,如
@app.route('/user/<username>')
,视图函数接收参数username
。 - 支持多种 HTTP 方法,如
@app.route('/login', methods=['GET', 'POST'])
,根据方法处理不同逻辑。
- 使用
- 视图函数逻辑处理
- 在视图函数中进行数据处理,如从数据库查询数据,使用数据库连接库执行 SQL 查询。
- 根据业务逻辑生成动态内容,如根据用户信息生成个性化问候语。
- 可以返回不同类型的数据,如 HTML 页面、JSON 数据等,使用
render_template
或jsonify
函数。
- 路由分组与蓝图
- 对于复杂项目,创建蓝图来组织路由,如
from flask import Blueprint; bp = Blueprint('user', __name__)
。 - 在蓝图中定义路由,如
@bp.route('/profile')
,然后在主应用中注册蓝图,app.register_blueprint(bp)
。 - 蓝图可使项目结构更清晰,便于维护和扩展。
- 对于复杂项目,创建蓝图来组织路由,如
(三)模板渲染
- Jinja2 模板引擎基础
- 在 HTML 模板文件中使用
{ { variable }}
语法输出变量,如{ { username }}
。 - 可以使用
{% for %} {% endfor %}
循环语句遍历数据,如{% for item in items %}{ { item }}{% endfor %}
。 - 条件判断使用
{% if %} {% endif %}
,如{% if user.is_authenticated %}Welcome, { { user.username }}{% endif %}
。
- 在 HTML 模板文件中使用
- 模板继承与复用
- 创建基础模板,如
base.html
,定义公共的页面结构,如头部、导航栏等。 - 子模板使用
{% extends 'base.html' %}
继承基础模板,然后使用{% block content %}{% endblock %}
定义可替换的内容块。 - 可以在子模板中覆盖基础模板的块,实现页面的个性化定制。
- 创建基础模板,如
- 模板中加载静态文件
- 在模板中使用
{ { url_for('static', filename='css/style.css') }}
引用静态文件,确保正确生成静态文件的
- 在模板中使用