跳转到主要内容

通过可配置的预览授权锁定Django站点或单个视图

项目描述

Build Status Test Coverage Latest Version

django-lockdown 是一个可重用的Django应用程序,用于锁定整个站点(或特定的视图),具有可定制的日期范围和预览授权。

安装

使用 easy_installpip 从PyPI安装

pip install django-lockdown

要在您的Django项目中使用 django-lockdown

  1. 'lockdown' 添加到您的 INSTALLED_APPS。如果您想使用 django-lockdowns 的默认锁定表单之一,您还必须确保您已将 django.contrib.auth 作为您的 INSTALLED_APPS 的一部分启用。

  2. 要启用对锁定站点或视图的密码的行政预览,请将 LOCKDOWN_PASSWORDS 设置为一个包含一个或多个纯文本密码的元组。

  3. 使用中间件来保护整个站点,或者通过应用装饰器来保护单个视图。

有关高级自定义管理员预览授权的更多信息,请参阅 LOCKDOWN_FORM 设置。

依赖项

django-lockdown 需要 Python 3.6 或更高版本以及 Django 2.2 或更高版本。

作为 CPython 的替代方案,也支持 PyPy 3.5 和 3.6。

用法

使用中间件

要锁定整个站点,请将 lockdown 中间件添加到您的中间件中

MIDDLEWARE = [
    # ...
    'lockdown.middleware.LockdownMiddleware',
]

可选地,您还可以将 URL 正则表达式添加到 LOCKDOWN_URL_EXCEPTIONS 设置中。

使用装饰器

  • 导入装饰器

    from lockdown.decorators import lockdown
  • 将装饰器应用于您想要保护的单个视图。例如

    @lockdown()
    def secret_page(request):
        # ...

装饰器接受七个参数

form

用于提供管理员预览的表单,而不是由 LOCKDOWN_FORM 引用的表单。请注意,这必须是一个实际的表单类,而不是设置中的模块引用。

until_date

使用此日期而不是由 LOCKDOWN_UNTIL 提供的日期。

after_date

使用此日期而不是由 LOCKDOWN_AFTER 提供的日期。

logout_key

使用预览注销密钥,而不是由 LOCKDOWN_LOGOUT_KEY 提供的密钥。

session_key

使用会话密钥,而不是由 LOCKDOWN_SESSION_KEY 提供的密钥。

url_exceptions

一组正则表达式列表,匹配的 URL 可以绕过锁定(而不是使用 LOCKDOWN_URL_EXCEPTIONS 中定义的)。

remote_addr_exceptions

一组 IP 地址或 IP 子网列表,匹配的 URL 可以绕过锁定(而不是使用 LOCKDOWN_REMOTE_ADDR_EXCEPTIONS 中定义的)。

extra_context

一个字典,其中包含将添加到传递给模板的默认上下文数据中的上下文数据。

任何其他关键字参数都将传递给管理员预览表单。默认表单接受一个参数

passwords

一个密码元组,用于替代由 LOCKDOWN_PASSWORDS 提供的密码。

设置

LOCKDOWN_ENABLED

一个可选的布尔值,如果设置为 False,则全局禁用 django-lockdown。默认为 True(锁定启用)。

LOCKDOWN_PASSWORDS

一个或多个明文密码,允许预览由 django-lockdown 保护站点或视图。

LOCKDOWN_PASSWORDS = ('letmein', 'beta')

如果此设置未提供(并且正在使用默认的 LOCKDOWN_FORM),则锁定页面将没有管理员预览。

如果使用除默认以外的 LOCKDOWN_FORM,则此设置无效。

LOCKDOWN_URL_EXCEPTIONS

一个可选的列表/元组,其中包含将匹配传入 URL 的正则表达式。如果 URL 匹配此列表中的正则表达式,则它将不会被锁定。例如

LOCKDOWN_URL_EXCEPTIONS = (
    r'^/about/$',   # unlock /about/
    r'\.json$',   # unlock JSON API
)

LOCKDOWN_VIEW_EXCEPTIONS

一个可选的正则表达式列表,将匹配传入请求的解析视图。如果传入请求的 URL 解析到列表中的视图之一,则它将不会被锁定。这对于您想要使用中间件锁定整个站点,但又想将某些本地化 URL 加入白名单的情况很有用。

例如

from yourapp import one_view_to_unlock, another_view_to_unlock

LOCKDOWN_VIEW_EXCEPTIONS = [
    one_view_to_unlock,
    another_view_to_unlock
]

LOCKDOWN_REMOTE_ADDR_EXCEPTIONS

一个可选的 IP 地址或 IP 子网列表,将匹配请求 IP 地址(从 requests.META[‘REMOTE_ADDR’])。如果请求 IP 地址在此列表中,则它将不会被锁定。例如

LOCKDOWN_REMOTE_ADDR_EXCEPTIONS = [
    '127.0.0.1',
    '::1',
]

LOCKDOWN_TRUSTED_PROXIES

使用反向代理或负载均衡器时,与LOCKDOWN_REMOTE_ADDR_EXCEPTIONS结合使用的可信代理IP地址列表。如果请求的IP地址来自可信代理列表,则将从X-Forwarded-For头(从requests.META['HTTP_X_FORWARDED_FOR'])检查最后一个地址是否在LOCKDOWN_REMOTE_ADDR_EXCEPTIONS中,并根据需要锁定或解锁。

例如

LOCKDOWN_TRUSTED_PROXIES = [
    '172.17.0.1',
]

LOCKDOWN_REMOTE_ADDR_EXCEPTIONS = [
    '172.17.0.5',
]

LOCKDOWN_UNTIL

用于锁定网站直到某个日期。设置为datetime.datetime对象。

如果既没有提供LOCKDOWN_UNTIL也没有提供LOCKDOWN_AFTER(默认值),则网站或视图将始终被锁定。

LOCKDOWN_AFTER

用于在某个日期之后锁定网站。设置为datetime.datetime对象。

另请参阅:LOCKDOWN_UNTIL

LOCKDOWN_LOGOUT_KEY

一个键,如果在锁定URL的查询字符串中提供,将使用户从预览中注销。

LOCKDOWN_FORM

默认锁定表单允许管理员通过输入预置的纯文本密码进行预览(默认情况下,与LOCKDOWN_PASSWORDS设置进行校验)。要设置更高级的访问锁定页面的认证方法,将LOCKDOWN_FORM设置为指向Django Form子类的Python点路径。此表单将在锁定页面上显示。如果表单在提交时通过验证,则允许用户访问锁定页面

LOCKDOWN_FORM = 'path.to.my.CustomLockdownForm'

django-lockdown提供用于对django.contrib.auth用户进行认证的表单(使用LOCKDOWN_FORM = 'lockdown.forms.AuthForm')。它接受两个关键字参数(在lockdown装饰器中)

staff_only

仅允许员工预览。默认为True(但默认值可以作为LOCKDOWN_AUTHFORM_STAFF_ONLY设置提供)。

superusers_only

仅允许超级用户预览。默认为False(但默认值可以作为LOCKDOWN_AUTHFORM_SUPERUSERS_ONLY设置提供)。

LOCKDOWN_AUTHFORM_STAFF_ONLY

如果使用lockdown.forms.AuthForm并且此设置设置为True,则只允许员工预览(默认为True)。

如果没有使用lockdown.forms.AuthForm,则没有效果。

LOCKDOWN_AUTHFORM_SUPERUSERS_ONLY

如果使用lockdown.forms.AuthForm并且此设置设置为True,则只允许超级用户预览(默认为False)。如果没有使用lockdown.forms.AuthForm,则没有效果。

LOCKDOWN_SESSION_KEY

一旦客户端获得管理员预览授权,他们将在浏览会话的剩余时间内继续获得授权(使用Django的内置会话支持)。LOCKDOWN_SESSION_KEY定义了使用的会话键;默认为'lockdown-allow'

模板

django-lockdown使用单个模板,lockdown/form.html。默认模板显示简单的“即将推出”消息和预览授权表单,如果通过LOCKDOWN_PASSWORDS设置了密码。

如果您想使用不同的模板,可以使用Django模板加载器指定要搜索模板的项目路径,在搜索django-lockdown中包含的模板之前。

在您覆盖的模板中,锁定预览表单在模板上下文中可用,为form

CHANGES

4.0.0 (2021-02-14)

  • 移除对已停用 Django 版本的(1.11、2.0 和 2.1)支持。

  • 添加对 Python 3.9 的支持,并移除对 Python 3.5 的支持。

  • 添加对 Django 3.1 的支持。

3.0.0. (2020-01-01)

  • 添加了对 Python 3.8 的支持。

  • 添加了对 Django 3.0 的支持。

  • 移除了对 Python 2.7 和 3.4 的支持。

2.0.0 (2019-05-26)

  • 在使用基于 IP 地址的锁定异常时添加了对代理的支持。

  • 这引入了一个破坏性变化:位于代理后面的安装需要设置新引入的 LOCKDOWN_TRUSTED_PROXIES,否则通过代理访问站点时将不再授权。

  • 当使用中间件锁定整个站点时,添加了对白名单视图的支持。

  • 添加了对 Django 2.2 的支持。

  • 仅对 Python <3.3 要求 mock 作为单独的第三方测试依赖。

  • 修复了压缩 IP 地址的检测。

  • 这为使用 REMOTE_ADDR_EXCEPTIONS 功能并将在配置中将 IP 地址作为字节字符串传递的用户引入了一个破坏性变化。虽然不太可能有人用 Python 3 做这件事,但在 Python 2 中它是默认的。在这个版本中,字节字符串不再起作用,但需要使用 Unicode 字符串。

  • 添加了指定远程地址异常的 IP 子网的能力。

1.6.0 (2018-11-25)

  • 停止支持 Django <=1.10。

  • 停止支持 Python 3.3。

  • 添加了绕过配置 IP 地址锁定的能力。

  • 在提交和 CI 期间集成 pre-commit 以进行代码风格检查。

  • 添加了对 Django 2.1 的支持。

  • 添加了对 Python 3.7 的支持。

  • 添加了对 PyPy 的支持。

1.5.0 (2017-12-05)

  • 添加了对 Django 2.0 的支持。

  • 在某些区域改进了代码风格。

1.4.2 (2017-04-07)

  • 修复了 PyPi 的格式问题。

1.4.1 (2017-04-07)

  • 修复了 PyPi 上传问题。

1.4.0 (2017-04-06)

  • 重构测试以使用 Mocks。

  • 添加了对 Python 3.6 的支持。

  • 添加了对 Django 1.11 的支持。

1.3 (2016-08-07)

  • 添加了对 Django 1.10 的支持。

  • 添加了对向锁定模板提供附加上下文数据的支持。

1.2 (2015-12-03)

  • 添加了对 Python 3.5 的支持。

  • 添加了对 Django 1.9 的支持。

  • 停止支持 Django <=1.7。

  • 修复了在装饰器参数中指定时无法正常工作的 URL 异常。

  • 改进了测试。

1.1 (2015-04-06)

  • 在 0.1.2 和 0.1.3 版本在 1.0 版本发布后标记后,这是 0.1.2 和 0.1.3 的最后一个版本。它包含所有新功能,尤其是对 Python 3 的支持。

  • django-lockdown 的最后一个版本,支持 Django 1.3、1.5 和 1.6。未来的版本将仅支持具有官方安全支持的 Django 版本。目前这些是 Django 1.4 LTS、1.7 和 1.8 LTS。

  • 修复了 Django >=1.7 的测试。

0.1.3(2014-03-15)(从未发布)

  • 添加了 LOCKDOWN_ENABLED 设置。

  • 删除了 decorator_from_middleware_with_args 的 Django 1.1 迁移。

0.1.2(2014-03-15)(从未发布)

  • 至少需要 Django 1.3。

  • 修复了测试运行脚本,使其与最近的 Django 版本兼容。

  • 将 csrf_token 模板标签添加到包含的表单模板中。

  • 对 Python 3 兼容性进行了少量语法调整。

1.0 (2013-07-10)

  • 向后不兼容:允许多个密码(密码设置已从 LOCKDOWN_PASSWORD 更改为 LOCKDOWN_PASSWORDS)。

  • 装饰器改为可调用装饰器(因此可以为单个装饰器覆盖设置)。

  • 添加了 AuthForm,可用于允许通过认证用户进行预览(通过 django.contrib.auth)。

  • 允许锁定到特定日期之前或之后。

0.1.1 (2009-11-24)

  • 修复了 setup.py,以确保不安装 tests 包。

0.1 (2009-11-16)

  • 初始发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

django-lockdown-4.0.0.tar.gz (13.0 kB 查看哈希值)

上传时间 源代码

构建分发

django_lockdown-4.0.0-py2.py3-none-any.whl (12.4 kB 查看哈希值)

上传时间 Python 2 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面