Python Django存储S3boto3存储在读取时发出HEAD和GET请求
我正在使用django应用程序中的Python Django存储S3boto3存储在读取时发出HEAD和GET请求,python,django,amazon-s3,boto3,python-django-storages,Python,Django,Amazon S3,Boto3,Python Django Storages,我正在使用django应用程序中的django storages包中的S3Boto3Storage存储后端。我使用后端处理S3中的大量文件 从存储器读取文件时,后端会发出单独的HEAD和GET请求。我多次执行此操作,因此如果可能的话,我更愿意跳过HEAD请求 我的读取操作与此类似: class MyModel(models.Model): img = FileField() instance = MyModel.objects.filter().first() instance.img
django storages
包中的S3Boto3Storage
存储后端。我使用后端处理S3中的大量文件
从存储器读取文件时,后端会发出单独的HEAD
和GET
请求。我多次执行此操作,因此如果可能的话,我更愿意跳过HEAD
请求
我的读取操作与此类似:
class MyModel(models.Model):
img = FileField()
instance = MyModel.objects.filter().first()
instance.img.read()
我使用的是默认的preload_metadata
标志,即False
是否有其他设置控制read方法的此行为
我的猜测是,
HEAD
请求在获取文件内容之前检查文件是否存在。因此,HEAD
调用可以替换为try/except语句。但是我不知道怎么做。注意:以下解决方案不适用于生产,如果您的潜在客户在代码中看到此情况,您的潜在客户将对您进行处罚:)
我的软件包版本旧:django存储==1.1.8
boto==2.38.0
boto3==1.2.1
但(我希望)主要思想会被理解 在应用程序的某个“开始”级别(根据您的喜好)上放置以下补丁(或者,如果您希望,可以扩展类) 在我的
django storages
版本中,方法get_key
的调用未将validate
变量传递到其中。除了显式地重新定义\uuuu init\uuu
方法外,我没有找到任何强制/更改它的方法
注:如果您的设置没有包含日志->日志中的显式boto
部分,那么对于boto中的GET/HEAD/etc.requests,将不会显示日志。只需将boto
部分添加到日志设置部分
'boto': {
'handlers': LOGGING_HANDLERS,
'level': 'DEBUG',
'propagate': False,
},
'boto': {
'handlers': LOGGING_HANDLERS,
'level': 'DEBUG',
'propagate': False,
},