首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有开关可以禁用/启用django模型对象中的任何更改?

是否有开关可以禁用/启用django模型对象中的任何更改?
EN

Stack Overflow用户
提问于 2020-01-06 14:01:21
回答 2查看 148关注 0票数 1

在Django模型中是否有类似开关/标志的东西,可以启用/禁用任何更改。

通过启用此开关,您不能更改/删除任何模型对象,即使是在引用的模型中(用外键连接),甚至不能从Django-shell中更改/删除。

EN

回答 2

Stack Overflow用户

发布于 2020-01-06 14:59:40

您可以使用多个数据库连接,这些连接实际上只是两个不同用户连接到同一个数据库的连接。一个具有完全权限,另一个仅具有读取权限

settings.py

代码语言:javascript
复制
DATABASES = {
    'default': {
        'NAME': 'foo',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'superuser',
        'PASSWORD': 'superuser',
    },
    'restricted': {
        'NAME': 'foo',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'restricted',
        'PASSWORD': 'restricted',
    }
}

然后添加一个自定义database router,它在两个

代码语言:javascript
复制
class SwitchRouter:

    def _writes_disabled(self):
        return False  # or True if the "switch" has been triggered somehow

    def db_for_write(self, model, **hints):
        if self._writes_disabled():
            return 'restricted'

settings.py

代码语言:javascript
复制
DATABASE_ROUTERS = ['path.to.SwitchRouter']
票数 3
EN

Stack Overflow用户

发布于 2020-01-06 14:27:06

既然你要求停止插入甚至是Django shell,我可以想到一种方法。一定有更优雅的方法。请注意,我自己没有尝试过,但我的建议是基于目前here的信息。因此,等待Stackoverflow中更有经验的成员可能是个好主意。

我假设您使用的是MySQL。请更改下面的建议以适合您的数据库管理系统。

要实现这一点,您需要具有GRANT特权的数据库管理员权限。另外,假设您在SETTINGS.py中的Django用户名是'abcdef‘(在数据库部分),您想要限制的表是'mytable’,数据库是'mydatabase‘。我还假设您希望从任何IP访问都会发生这种情况。

基本上你将不得不撤销插入/删除权限,如下所示。

代码语言:javascript
复制
REVOKE INSERT, DELETE ON mydatabase.mytable FROM 'abcdef'@'%';

您可以对其他权限重复此过程。

要启用此功能,您需要授予相同的权限,如下所示。

代码语言:javascript
复制
GRANT INSERT, DELETE ON mydatabase.mytable TO 'abcdef'@'%';

如果这是你想要的,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59607361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档