新手开发Django应用 求django-cookie-consent配置使用教程
(你已经完成了包的安装,下面全是不需要额外基础就能照着走的步骤)
第一步:完成基础配置让提示条正常弹出
- 在项目的
settings.py文件中,找到INSTALLED_APPS配置列表,依次新增2个依赖项:bootstrap4(包默认用bootstrap渲染提示条,不装会样式错乱)、cookie_consent - 找到
MIDDLEWARE配置列表,在django.contrib.sessions.middleware.SessionMiddleware的后面一行新增中间件:cookie_consent.middleware.CookieConsentMiddleware(这个位置不能错,否则会读不到用户的会话信息,保存的选择刷新就丢失) - 打开项目根目录的
urls.py,在urlpatterns列表中新增路由:path('cookie_consent/', include('cookie_consent.urls'))(这是专门用来接收用户保存Cookie选择的接口,漏了的话点按钮会报404) - 执行数据库迁移命令:
python manage.py migrate cookie_consent(包需要单独的表存储用户的同意记录,不执行会报数据库表不存在的错误) - 找到项目通用的全局模板
base.html,在</body>闭合标签前新增两行代码:
这行代码会自动在所有继承{% load cookie_consent_tags %} {% render_cookie_consent %}base.html的页面上渲染可交互的Cookie同意提示条,不需要自己写前端页面。
第二步:配置Cookie分组与单个Cookie规则
这个包默认不需要自己写复杂的判断逻辑,只要通过配置定义好分组和单条Cookie的规则,前端会自动渲染对应的选择选项。
- 分组定义:一般通用的合规分组为3类,你可以根据自己网站的实际需求调整,在
settings.py中新增COOKIE_CONSENT_GROUPS配置:- 必要组:网站正常运行必须的Cookie,比如登录态、CSRF校验的Cookie,配置中设置为不可拒绝
- 分析组:网站统计、流量分析类的Cookie,比如百度统计、GA的追踪Cookie
- 营销组:广告追踪、营销转化类的Cookie,这类必须允许用户选择是否同意
- 单个Cookie规则配置:在
settings.py中新增COOKIE_CONSENT_VARIANTS配置,每个条目对应一个网站会用到的具体Cookie,标注清楚名称、所属分组、用途说明、过期时间。你可以直接参考下面的入门示例写:COOKIE_CONSENT_VARIANTS = {
'csrftoken': {
'name': 'csrftoken',
'max_age': 31449600,
'group': 'required',
'description': '用于保障网站表单提交安全的必要Cookie,无法拒绝'
},
'sessionid': {
'name': 'sessionid',
'max_age': 1209600,
'group': 'required',
'description': '用于存储用户登录会话的必要Cookie,无法拒绝'
},
'_ga': {
'name': '_ga',
'max_age': 63115200,
'group': 'analytics',
'description': '用于统计网站访问量的分析Cookie,可随时拒绝'
}
}
第三步:监听用户选择、落实拒绝规则
包本身已经内置了所有监听和存储逻辑,不需要自己写接口接收用户的选择请求,只需要在自己的业务代码里做判断就行:
- 自动监听逻辑:中间件会自动把用户的选择结果存储到名为
cookie_consent的Cookie中,后续所有请求都能自动读取这个结果,不需要手动解析Cookie值 - 前端模板里的判断逻辑:只要用户没同意对应分组,就不加载对应代码,避免违规。用自带的模板标签判断,示例:
{% load cookie_consent_tags %} {% cookie_consent_accepted 'analytics' %} <!-- 只有用户明确同意分析类Cookie,才会输出这段统计代码到页面 --> <script> // 你的网站统计、分析脚本放在这里 </script> {% endcookie_consent_accepted %} - 后端视图里的判断逻辑:如果你的业务逻辑需要根据用户的Cookie选择执行对应操作,直接调用自带的工具函数即可,不需要自己解析Cookie:
from cookie_consent.util import is_cookie_accepted def user_profile_view(request): # 判断用户是否同意分析类Cookie if is_cookie_accepted(request, '_ga'): # 执行需要用户同意才能运行的逻辑,比如记录用户访问行为 pass - 拒绝后的自动清理逻辑:如果用户在提示条里修改选择、拒绝了某类Cookie,可以调用包自带的清理函数,自动把对应分组下的所有Cookie从用户浏览器中删除,不需要自己写循环删Cookie的代码。
入门阶段容易踩的配置坑
- 中间件顺序放错:如果把
CookieConsentMiddleware放在SessionMiddleware前面,会导致读取不到用户会话,保存的选择刷新页面就丢失 - 漏加URL路由:用户点击“保存选择”按钮时会触发404错误,因为找不到处理提交请求的接口
- 脚本加载位置错误:把统计、广告脚本直接放在页面上,没有用同意判断包裹,就算弹出了提示条,脚本也会在用户未同意时就加载,不符合合规要求
- 遗漏迁移步骤:启动服务访问页面时会报数据库表不存在的错误
内容的提问来源于stack exchange,提问作者FlawlessCalamity
相关产品推荐
相关产品推荐

