跳转到主要内容

用于维护与Django版本发布前兼容性的工具。

项目描述

https://img.shields.io/pypi/pyversions/django-birdcage.svg https://img.shields.io/pypi/v/django-birdcage.svg https://img.shields.io/pypi/status/django-birdcage.svg https://img.shields.io/pypi/l/django-birdcage.svg https://travis-ci.org/freakboy3742/django-birdcage.svg?branch=master

在部署大型网站时,运维团队有时会在整个服务器集合的子集上部署新代码。这种做法称为“金丝雀”部署。大多数用户将继续使用旧代码提供服务;只有那些击中“金丝雀”机器的用户才会看到新代码。

大型网站通常在升级风险感知较高时使用“金丝雀”。例如,在一个复杂网站上从1.8 LTS升级到1.11 LTS的Django版本通常被认为是一个有风险的升级;使用金丝雀来测试升级是否按预期工作,在将所有web服务器切换到升级后的代码库之前。

不幸的是,虽然Django有良好的向后兼容性保证,但金丝雀部署还需要向前兼容性。这是因为用户可能在新的代码库上服务一个请求,但随后的更新可能来自旧的代码库。如果信息(如安全令牌)在版本之间既不向后也不向前兼容,一些用户在在新旧代码库之间来回移动时将看到错误。

Birdcage是一个项目,包括一些工具,可以帮助您管理金丝雀升级,通过为Django中已知问题提供向前兼容的垫片。

鸟笼解决什么问题?

Django 1.10:加盐的CSRF令牌

Django 1.10 引入了CSRF处理的变化,以抵御 BREACH 攻击。Django 1.10+可以解析Django < 1.10 CSRF令牌;然而,如果用户被分配了Django 1.10+ CSRF令牌,它将由于无效而被Django 1.8拒绝。

为了解决这个问题,Birdcage提供了一个可以解析Django 1.10 CSRF令牌的Django 1.8的CsrfViewMiddleware版本。

  • 在您的Django 1.8代码库的设置中,将您的 MIDDLEWARE 设置中的 django.middleware.csrf.CsrfViewMiddleware 替换为 birdcage.v1_11.csrf.CsrfViewMiddleware

  • 在您的Django 1.10+代码库中,继续使用Django CsrfViewMiddleware。

为什么它被称为Birdcage?

嗯,你必须把你的金丝雀放在某个地方来保护它们……:-)

由以下机构支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面