Skip to content

演示模式

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

配置项

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

# 开启演示模式
DJANGO_DEMO=True

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

实现原理

演示模式采用视图层检查的方式实现,在每个写操作的视图方法开头判断配置:

python
# config/env.py
import os
DJANGO_DEMO = (os.getenv('DJANGO_DEMO', 'False') == 'True')

视图中通过导入 DJANGO_DEMO 变量进行判断:

python
# application/user/views.py
from config.env import DJANGO_DEMO

class UserAddView(PermissionRequired, View):
    permission_required = ("sys:user:add",)

    def post(self, request):
        # 演示环境禁止操作
        if DJANGO_DEMO:
            return R.failed("演示环境,暂无操作权限")
        result = services.add_user(request)
        return result

为什么不用装饰器?

演示模式没有使用装饰器实现,原因是:不同模块对"写操作"的定义略有差异(有的模块有导入/导出,有的有授权操作),在视图层直接判断更灵活,可以精确控制每个接口的行为。

受保护的操作

演示模式拦截以下操作(写操作):

- 新增(add)
- 编辑(update)
- 删除(delete / batchDelete)
- 状态设置(status)
- 重置密码(resetPwd)
- 修改密码(updatePwd)
- 导入(import)
- 授权(auth / assignMenu)
- 保存(save)

不受影响的操作:

- 登录(login)
- 获取验证码(captcha)
- 查询列表(list/page)
- 查询详情(detail)
- 导出(export)
- 获取菜单(getMenus)
- 获取用户信息(getUser)

各模块演示模式配置

模块拦截的视图说明
用户管理add/update/delete/status/resetPwd新增/编辑/删除/状态/重置密码
角色管理add/update/delete/status/assignMenu新增/编辑/删除/状态/分配菜单
菜单管理add/update/delete新增/编辑/删除
部门管理add/update/delete新增/编辑/删除
字典管理add/update/delete新增/编辑/删除(含字典项)
配置管理add/update/delete新增/编辑/删除(含配置项)
文章管理add/update/delete/status新增/编辑/删除/状态
登录日志delete删除(保留查看能力)
操作日志delete删除(保留查看能力)

自定义演示模式提示

如需修改演示模式的提示信息,直接修改对应视图中的提示文本:

python
# 自定义提示信息
if DJANGO_DEMO:
    return R.failed("当前为演示环境,如需操作请联系管理员")

前端配合处理

前端可通过响应中的 msg 字段识别演示模式拦截,并展示相应提示:

typescript
// 前端拦截器已统一处理 code=1 的响应,自动弹出 ElMessage.error(msg)
// 无需额外处理,演示模式的提示会自动显示

适用场景

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

最佳实践

1. 开发环境:DJANGO_DEMO=False,允许所有操作
2. 测试环境:DJANGO_DEMO=False,允许所有操作
3. 演示环境:DJANGO_DEMO=True,只读模式
4. 生产环境:DJANGO_DEMO=False,通过权限控制访问

注意事项

演示模式和权限控制是两套独立的机制:

  • 权限控制:决定用户是否有权限执行某操作
  • 演示模式:决定所有用户是否可以执行写操作

两者同时生效,即使有写权限的用户,在演示模式下也会被拦截。

总结

演示模式具备以下特点:

1. 环境变量控制:DJANGO_DEMO=True 开启,False 关闭
2. 写操作拦截:在视图中检查配置,拦截所有写操作
3. 只读体验:查询操作不受影响,用户可正常浏览数据
4. 简单实现:无需装饰器,在视图函数中直接判断即可
5. 灵活配置:可按模块精确控制拦截范围
6. 与权限独立:和 RBAC 权限体系互不影响

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