Django 受保护视频
使用 Django 身份验证和您自己的权限回调。DRM-X 包不会创建视频表或访问授权表。
包含预览版 SDK、应用示例和源码。请保留解压后的目录结构。
需要自定义的三个位置#
- 配置
settings.py添加 drmx 并配置 DRMX,包括 AUTHORIZE。
- 授权
您的应用:drmx_access.py
基于现有系统实现 authorize(user, video_id)。
- 路由
urls.py包含 drmx.urls;复用正常的登录和 CSRF 中间件。
1. 安装 wheel 包#
# From the extracted kit root:
python -m pip install packages/python/drmx_django-1.3.0rc13-py3-none-any.whl使用 Python 3.12+ 和受支持的 Django 版本(5.2–6.0)。将 drmx 添加到 INSTALLED_APPS。保留身份验证、会话和 CsrfViewMiddleware。新安装不需要运行 DRM-X 迁移命令;您自己的应用仍可能需要正常迁移。
2. 配置设置和路由#
# settings.py — keep your existing application settings
DRMX = {
'SITE_ID': os.environ['DRMX_SITE_ID'],
'SITE_KEY': os.environ['DRMX_SITE_KEY'],
'ACCESS_KEY': os.environ['DRMX_ACCESS_KEY'],
'INSTANCE_ID': 'my-website',
'POLICY': 'multi-tier-standard',
'AUTHORIZE': 'myapp.drmx_access.authorize',
}
# urls.py — add to your existing urlpatterns
path('video/', include('drmx.urls'))照常在 settings 中导入 os,在 urls 中导入 path/include。将 myapp 替换为您的应用模块。
3. 返回允许访问的内容#
创建 myapp/drmx_access.py。下方数据访问调用仅作示例;请使用您当前的购买、会员或课程报名查询。
def authorize(user, video_id):
video = customer_catalog.find_authorized_video(user.id, video_id)
if video is None:
return None
return {'content_id': video.drmx_content_id,
'content_type': 'vod', 'title': video.title}首次本地测试时,可仅允许一个现有测试用户访问一个网站视频 ID,然后返回已发布的 Content ID。此临时允许规则只能用于本地测试。随附的 examples/sdk/django/authorization.py 在您实现权限检查前会拒绝所有用户。
在生产环境中,每次调用都应查询数据库。权限不存在、已到期或已撤销时,返回 None。省略策略时使用已配置的默认策略。
4. 登录并打开播放器#
使用您选定的网站视频 ID 打开 /video/lesson-123/。支持字符串 ID 和 UUID。SDK 提供播放器页面和会话端点,并在每次请求时重新执行回调检查。
保留正常的 Django 保护机制#
保留随附的 CSRF 验证和同源端点。当前播放器通过端点 URL 传递经过掩码处理的 CSRF 令牌;请勿将其查询字符串写入访问日志,并保持 no-store/no-referrer 行为。使用 HTTPS 和安全的会话 cookie。
从带有 DRM-X 数据表的旧版升级?请保留迁移历史,并在移除旧应用前阅读 legacy/README.md。新 SDK 不会删除这些数据表。
上线前检查#
- 以有权限的用户登录,并在支持的浏览器中播放已发布的视频。
- 测试未登录和未付费用户,再测试权限被撤销或到期的情况。新的会话请求必须被拒绝。
- 尝试修改浏览器中的 Content ID 或网站视频 ID。服务器必须检查新的选择。
- 设置准确的公共 HTTPS 源,保留框架的会话/CSRF 保护,并禁用演示身份代码。
已有会话和 DRM 许可证具有各自的有效期。新请求会检查权限变更,但不会清除已经签发的许可证。
DRM-X 6.0