Skip to content

演示模式

演示模式用于在线体验环境,开启后所有写操作(新增、编辑、删除等)将被拦截,返回"演示环境,暂无操作权限"提示。通过 FLASK_DEMO 环境变量控制。装饰器位于 src/middleware/demo.py。

配置项 ​

环境变量默认值说明
FLASK_DEMOFalse是否开启演示模式
bash
# .env

# 开启演示模式
FLASK_DEMO=True

# 关闭演示模式(生产环境)
FLASK_DEMO=False

check_demo 装饰器 ​

src/middleware/demo.py 中的 @check_demo 装饰器用于拦截写操作:

python
from src.middleware.demo import check_demo

@position_blue.route('/add', methods=['POST'])
@check_permission('sys:position:add')
@check_demo
def add():
    from src.modules.system.position.service import add_position
    from src.modules.system.position.schema import PositionForm
    data = parse_request_body(request, PositionForm)
    return add_position(data)

装饰器实现:

python
from functools import wraps
from flask import current_app
from src.core import response as R

def check_demo(func):
    """演示模式拦截装饰器,放在 @check_permission 之后、路由函数之前"""
    @wraps(func)
    def wrapper(*args, **kwargs):
        if current_app.config.get('FLASK_DEMO'):
            return R.failed("演示环境,暂无操作权限")
        return func(*args, **kwargs)
    return wrapper

装饰器顺序 ​

@check_demo 必须放在 @check_permission 之后:

python
# 正确顺序
@position_blue.route('/add', methods=['POST'])
@check_permission('sys:position:add')  # 先校验权限
@check_demo                             # 再检查演示模式
def add():
    ...

顺序重要

如果 @check_demo 放在 @check_permission 之前,权限校验会被跳过,可能导致安全问题。

万能验证码 ​

演示模式下万能验证码 618618 可绕过正常验证码校验,方便演示环境登录:

python
# src/common/utils/captcha.py
def verify_captcha(key: str, code: str) -> bool:
    # 演示模式下检查万能验证码
    if current_app.config.get('FLASK_DEMO') and code == CAPTCHA_BYPASS_CODE:
        return True
    # 正常校验逻辑...

适用场景 ​

1. 在线体验:让用户无需注册即可体验系统功能
2. 演示环境:销售或产品演示时防止误操作
3. 公开测试:开放测试环境但保护数据安全

受保护的操作 ​

演示模式拦截以下操作(带 @check_demo 装饰器的端点):

- 新增(add)
- 编辑(update)
- 删除(delete / batchDelete)
- 状态设置(status)
- 重置密码(resetPwd)
- 导入(import)
- 授权(auth)
- 生成代码(generate)

不受影响的操作:

- 登录(login)
- 获取验证码(captcha)
- 查询列表(list)
- 查询详情(detail)
- 导出(export)

总结 ​

演示模式具备以下特点:

1. 环境变量控制:FLASK_DEMO=True 开启,False 关闭
2. 写操作拦截:@check_demo 装饰器拦截所有写操作
3. 万能验证码:演示模式下可用,方便登录体验
4. 安全顺序:必须放在 @check_permission 之后
5. 只读体验:查询操作不受影响,用户可正常浏览数据

小蚂蚁云团队 · 提供技术支持