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)。在我的例子中,我把它移到了代码的末尾,工作得非常完美。就中间件顺序而言,它最初是第一个。