跳转到主要内容

用于限制Django代码库部分数据库访问的工具

项目描述

Django sans DB

限制Django代码部分数据库访问的工具。

安装

pip install django-sans-db

如果您想使用 {% sansdb %} 模板标签,您需要将 "sans_db" 添加到您的 INSTALLED_APPS

用法

上下文管理器

您可以使用 block_db 来阻止代码段对数据库的访问。

from sans_db.context_managers import block_db

User.objects.create(...)  # Works outside of block_db()
with block_db():
    User.objects.get()  # Raises DatabaseAccessBlocked

如果您在Django的 DATABASES 设置中有多条记录,则 block_db 将默认阻止所有记录。

如果您想阻止对数据库子集的访问,请传递它们的别名列表(即 DATABASES 字典中的键)。

from sans_db.context_managers import block_db

with block_db(databases=["replica"]):
    User.objects.using("primary").create(...)  # This DB isn't blocked.
    User.objects.using("replica").get()  # Raises DatabaseAccessBlocked

装饰器

您可以使用 block_db 装饰函数和方法,以阻止其中的数据库访问。例如

from sans_db.context_managers import block_db

class MyClass:
    def allowed(self):
        User.objects.create(...)  # Works outside of block_db()

    @block_db()
    def not_allowed(self):
        User.objects.create(...)  # Raises DatabaseAccessBlocked

模板后端

您可以使用我们的自定义模板后端在渲染Django模板时阻止对数据库的访问。

注意:目前,仅支持Django模板。

您可以通过将模板后端设置为 "sans_db.template_backends.django_sans_db.DjangoTemplatesSansDB" 来阻止所有模板的数据库访问。

例如

# settings.py

TEMPLATES = [
    {
        "BACKEND": "sans_db.template_backends.django_sans_db.DjangoTemplatesSansDB",
        "APP_DIRS": True,
        "OPTIONS": {...},
    },
]

尝试查询数据库将引发 sans_db.exceptions.DatabaseAccessBlocked

请参阅Django文档中关于模板引擎支持的部分,了解如何将其设置为辅助模板渲染器的详细设置。

模板标签

您可以使用{% sansdb %}模板标签来在模板的一部分中阻止数据库访问。

该模板标签接受数据库别名作为字符串或变量。如果作为变量传递,则接受字符串或字符串的可迭代对象。如果没有传递别名,则将阻止所有数据库。

注意:尝试访问数据库时将引发DatabaseAccessBlocked异常。

阻止所有数据库

{% load sansdb %}
{% sansdb %}
    {# ... #}
{% endsansdb %}

阻止模板中命名的数据库列表

{% load sansdb %}
{% sansdb "second_db" "third_db" %}
    {# ... #}
{% endsansdb %}

从上下文变量阻止数据库列表

{% load sansdb %}
{% sansdb databases %}
    {# ... #}
{% endsansdb %}

项目详情


下载文件

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

源分布

django_sans_db-1.2.0.tar.gz (4.9 kB 查看哈希值)

上传时间

构建分布

django_sans_db-1.2.0-py3-none-any.whl (5.9 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

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