我的应用程序用于注册系统中的餐馆。除了一些数据(如餐厅名称),前端正在发送餐厅标识。使用此代码:
class Base64ImageField(serializers.ImageField):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.default_error_messages['image_not_png'] = _(
'Only .png files are supported.'
)
def to_internal_value(self, data):
if isinstance(data, six.string_types):
if 'data:' in data and ';base64,' in data:
header, data = data.split(';base64,')
try:
decoded_file = base64.b64decode(data)
except TypeError:
self.fail('invalid_image')
file_name = str(uuid.uuid4())
file_extension = self.get_file_extension(file_name, decoded_file)
if file_extension is not 'png':
self.fail('image_not_png')
complete_file_name = '%s.%s'.format(file_name, file_extension)
data = ContentFile(decoded_file, name=complete_file_name)
return super().to_internal_value(data)
def get_file_extension(self, file_name, decoded_file):
return imghdr.what(file_name, decoded_file)
我能够使用一些随机生成的名称解码并将徽标保存到磁盘。现在我想知道如何正确命名该文件。通过'正确',我的意思是我想要将徽标文件命名为与餐馆名称相同,这是有问题的,因为to_internal_value
除了文件数据之外无法访问任何其他内容。问题是:应该在哪里我把代码重命名为与同一请求中出现的餐馆名称相同?