Become a sponsor

演示模式
演示模式用于在线体验环境,开启后所有写操作(新增、编辑、删除等)将被拦截,返回"演示环境,暂无操作权限"提示。通过 DJANGO_DEMO 环境变量控制。
| 环境变量 | 默认值 | 说明 |
|---|---|---|
DJANGO_DEMO | False | 是否开启演示模式 |
# .env
# 开启演示模式
DJANGO_DEMO=True
# 关闭演示模式(生产环境)
DJANGO_DEMO=False演示模式采用视图层检查的方式实现,在每个写操作的视图方法开头判断配置:
# config/env.py
import os
DJANGO_DEMO = (os.getenv('DJANGO_DEMO', 'False') == 'True')视图中通过导入 DJANGO_DEMO 变量进行判断:
# 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 | 删除(保留查看能力) |
如需修改演示模式的提示信息,直接修改对应视图中的提示文本:
# 自定义提示信息
if DJANGO_DEMO:
return R.failed("当前为演示环境,如需操作请联系管理员")前端可通过响应中的 msg 字段识别演示模式拦截,并展示相应提示:
// 前端拦截器已统一处理 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 权限体系互不影响