初识Flask
字数 1182 2025-08-11 21:26:16

Flask Web框架全面教程

1. Flask简介

Flask是Python上的一个轻量级Web应用程序框架,被称为"微框架"。它旨在保持核心简单且可扩展,没有内置的数据库抽象层或表单验证支持,但支持通过扩展添加这些功能。

Flask基于两个核心组件:

  • Werkzeug:WSGI工具包,实现请求、响应对象和实用函数
  • Jinja2:Python的流行模板引擎,用于动态网页生成

2. 安装与项目结构

安装Flask

pip3 install flask

安装时会自动安装依赖项Werkzeug和Jinja2

项目基本结构

项目名/
├── static/      # 静态文件
├── templates/   # 模板文件
└── app.py       # 主程序文件

3. 基本Flask程序

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'

if __name__ == '__main__':
    app.run()

app.run参数详解

app.run(host='127.0.0.1', port=8080, debug=True, load_dotenv=True)
  • host:默认127.0.0.1(仅本机访问),设为0.0.0.0可外部访问
  • port:Web服务器端口,默认5000
  • debug:调试模式,代码变更自动重载服务器
  • load_dotenv:加载.env和.flaskenv环境变量文件

4. 调试模式

# 方法1
app.debug = True
app.run()

# 方法2
app.run(debug=True)

5. 配置管理

配置方法

# 方法1(不推荐)
app.debug = True

# 方法2(字典形式)
app.config["DEBUG"] = True

# 方法3(配置文件)
app.config.from_pyfile('settings.py')

# 方法4(推荐:类配置)
app.config.from_object("setobj.settings")

常见配置项

{
    'ENV': 'production',  # 环境:production/development/testing
    'DEBUG': False,
    'TESTING': False,
    'SECRET_KEY': None,
    # ...其他配置
}

6. 路由系统

基本路由

@app.route('/')
def index():
    return 'Home Page'

@app.route('/about')
def about():
    return 'About Page'

等价于底层实现

def user():
    return 'User Page'
app.add_url_rule('/user', view_func=user)

变量规则

@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: {post_id}'

转换器类型

  • <int:var>:整型
  • <float:var>:浮点型
  • <string:var>:字符串(默认)
  • <path:var>:路径
  • <uuid:var>:UUID格式
  • <any(val1,val2):var>:备选值

URL尾斜杠行为

  • /path/:访问/path会自动重定向到/path/
  • /path:访问/path/会返回404错误

7. 请求与响应

请求对象

from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return 'POST请求'
    else:
        return 'GET请求'

获取请求参数

# GET请求参数
username = request.args.get('username')

# POST表单数据
username = request.form['username']

响应类型

# 字符串
return 'Hello'

# 字典(自动转为JSON)
return {'key': 'value'}

# 元组
return 'Hello', 200, {'Header': 'Value'}

# 响应对象
from flask import Response
return Response('<h1>Hello</h1>', status=200)

make_response

from flask import make_response

@app.route('/')
def index():
    resp = make_response('Hello', 200)
    resp.headers['X-Something'] = 'Value'
    return resp

8. 重定向与URL构造

from flask import redirect, url_for

@app.route('/')
def index():
    return redirect(url_for('login'))

@app.route('/login')
def login():
    return 'Login Page'

9. 模板渲染

基本模板渲染

from flask import render_template

@app.route('/')
def index():
    return render_template('index.html', name='John')

模板文件结构

templates/
└── index.html

多参数传递

@app.route('/')
def index():
    context = {
        'name': 'John',
        'age': 25
    }
    return render_template('index.html', **context)

字符串渲染

from flask import render_template_string

@app.route('/')
def index():
    return render_template_string('<h1>Hello {{ name }}</h1>', name='John')

10. Jinja2模板语法

变量输出

<p>{{ variable }}</p>

控制结构

{% if user %}
    <p>Hello {{ user }}</p>
{% else %}
    <p>Please login</p>
{% endif %}

{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}

循环变量

  • loop.index:当前迭代索引(从1开始)
  • loop.index0:当前迭代索引(从0开始)
  • loop.first:是否为第一次迭代
  • loop.last:是否为最后一次迭代
  • loop.length:序列长度
  • loop.revindex:反向索引(从1结束)
  • loop.revindex0:反向索引(从0结束)

11. 过滤器

常用过滤器

{{ name|upper }}          <!-- 大写 -->
{{ name|lower }}          <!-- 小写 -->
{{ name|title }}          <!-- 首字母大写 -->
{{ text|truncate(30) }}   <!-- 截断 -->
{{ html|safe }}           <!-- 禁用转义 -->
{{ list|join(', ') }}     <!-- 连接 -->
{{ num|round(2) }}        <!-- 四舍五入 -->

自定义过滤器

# 方法1:add_template_filter
def replace_script(value):
    return value.replace('script', '')
app.add_template_filter(replace_script, 'replace')

# 方法2:装饰器
@app.template_filter('replace')
def replace_script(value):
    return value.replace('script', '')

12. 模板全局变量

  • config:当前配置对象
  • request:当前请求对象
  • session:当前会话对象
  • g:请求绑定的全局变量
  • url_for():URL构造函数
  • get_flashed_messages():获取闪现消息

13. 最佳实践

  1. 使用蓝图组织大型应用
  2. 生产环境关闭调试模式
  3. 使用环境变量管理敏感配置
  4. 合理使用模板继承减少重复代码
  5. 对用户输入进行验证和转义
  6. 使用工厂模式创建应用

通过本教程,您已经掌握了Flask框架的核心概念和基本用法,可以开始构建自己的Web应用程序了。

Flask Web框架全面教程 1. Flask简介 Flask是Python上的一个轻量级Web应用程序框架,被称为"微框架"。它旨在保持核心简单且可扩展,没有内置的数据库抽象层或表单验证支持,但支持通过扩展添加这些功能。 Flask基于两个核心组件: Werkzeug :WSGI工具包,实现请求、响应对象和实用函数 Jinja2 :Python的流行模板引擎,用于动态网页生成 2. 安装与项目结构 安装Flask 安装时会自动安装依赖项Werkzeug和Jinja2 项目基本结构 3. 基本Flask程序 app.run参数详解 host :默认127.0.0.1(仅本机访问),设为0.0.0.0可外部访问 port :Web服务器端口,默认5000 debug :调试模式,代码变更自动重载服务器 load_dotenv :加载.env和.flaskenv环境变量文件 4. 调试模式 5. 配置管理 配置方法 常见配置项 6. 路由系统 基本路由 等价于底层实现 变量规则 转换器类型 <int:var> :整型 <float:var> :浮点型 <string:var> :字符串(默认) <path:var> :路径 <uuid:var> :UUID格式 <any(val1,val2):var> :备选值 URL尾斜杠行为 /path/ :访问/path会自动重定向到/path/ /path :访问/path/会返回404错误 7. 请求与响应 请求对象 获取请求参数 响应类型 make_ response 8. 重定向与URL构造 9. 模板渲染 基本模板渲染 模板文件结构 多参数传递 字符串渲染 10. Jinja2模板语法 变量输出 控制结构 循环变量 loop.index :当前迭代索引(从1开始) loop.index0 :当前迭代索引(从0开始) loop.first :是否为第一次迭代 loop.last :是否为最后一次迭代 loop.length :序列长度 loop.revindex :反向索引(从1结束) loop.revindex0 :反向索引(从0结束) 11. 过滤器 常用过滤器 自定义过滤器 12. 模板全局变量 config :当前配置对象 request :当前请求对象 session :当前会话对象 g :请求绑定的全局变量 url_for() :URL构造函数 get_flashed_messages() :获取闪现消息 13. 最佳实践 使用蓝图组织大型应用 生产环境关闭调试模式 使用环境变量管理敏感配置 合理使用模板继承减少重复代码 对用户输入进行验证和转义 使用工厂模式创建应用 通过本教程,您已经掌握了Flask框架的核心概念和基本用法,可以开始构建自己的Web应用程序了。