Python Django连接和自动循环密码数据库

Python Django连接和自动循环密码数据库,python,mysql,django,passwords,Python,Mysql,Django,Passwords,我有一个Django应用程序,它工作得非常好。它连接到云上托管的MySQL服务器 出于安全原因,MySQL服务器设置为每30天自动轮换一次密码Django只能在使用我开发的自定义函数加载settings.py时才能访问新密码(该函数将从AWS Secrets Manager获取新密码) 我正在寻找一种方法,允许Django检测连接是否有问题,然后对用户透明地更新密码 这可能吗?我能想到的选项有: 您可以使用自定义中间件在每次请求之前检查连接 您可以使用cron作业定期检查失败的数据库连接,并在发

我有一个
Django
应用程序,它工作得非常好。它连接到云上托管的
MySQL
服务器

出于安全原因,
MySQL
服务器设置为每30天自动轮换一次密码
Django
只能在使用我开发的自定义函数加载
settings.py
时才能访问新密码(该函数将从
AWS Secrets Manager
获取新密码)

我正在寻找一种方法,允许
Django
检测连接是否有问题,然后对用户透明地更新密码


这可能吗?

我能想到的选项有:

  • 您可以使用自定义中间件在每次请求之前检查连接
  • 您可以使用
    cron
    作业定期检查失败的数据库连接,并在发现此类故障时更新设置

  • 要检查连接,可以使用方法
    django.db.connection。确保\u connection()
    。如果你看一下,你可以试试这样的东西:

    from django.db import connection
    from django.db.utils import OperationalError
    
    class Command(BaseCommand):
        def handle(self, *args, **options):
            try:
                # if this succeeds, no further action is needed
                connection.ensure_connection()
            except OperationalError:
                # update the DB password and try again
    

    我尝试了选项1,它成功了。但是,当DB密码不正确时,通过中间件的第一个请求会导致用户出现拒绝访问错误。当用户刷新页面时,它会提供预期的结果。有什么想法吗?您的自定义中间件在列表中的哪个位置?在调用中间件之前,可能有另一个中间件正在访问数据库?对不起,它正在工作。这是我在Django中的第一个中间件,代码中的第一行是:response=self.get_response(request)。在我的例子中,我把它移到了代码的末尾,工作得非常完美。就中间件顺序而言,它最初是第一个。