#django #python-3.x
#django #python-3.x
Вопрос:
Я хочу загрузить форму администратора Django в gcloud. Моя часть gcloud работает, но требует пути к файлу. Я хотел бы получить доступ к необработанным данным файла из формы загрузки и предоставить их для blob
загрузки gcloud.
У меня есть модель, которая выглядит следующим образом
from django.db import models
from gcloud import storage
from oauth2client.service_account import ServiceAccountCredentials
# Create your models here.
class TestFile(models.Model):
name = models.CharField(max_length=64,
# NOT NULL, UNIQUE, no default.
null=False, default=None, blank=False, unique=True
)
data = models.FileField()
img_src = models.CharField(max_length=255,
null=True, default=None, blank=True
)
def save(self, *args, **kwargs):
super(TestFile, self).save(*args, **kwargs)
filename = self.data.url
print("FILENAME: " filename)
# How do I get the file DATA
У меня также есть таблица администратора, подобная этой.
from django.contrib import admin
from django.utils.safestring import mark_safe
from .models import TestFile
class TestFileAdmin(admin.ModelAdmin):
list_display = (
"data",
"name",
"_img_src",
)
def _img_src(self, obj):
return mark_safe(u'<img style="height: 75px;width: 75px;object-fit: cover;" src="%s"/>' % obj.img_src)
admin.site.register(TestFile, TestFileAdmin)
Используя любой сервер хранилища, который я хочу, у меня есть несколько примеров кода, подобных этому:
from gcloud import storage
from oauth2client.service_account import ServiceAccountCredentials
import os
credentials_dict = {
"type": "service_account",
"client_id": os.environ["BACKUP_CLIENT_ID"],
"client_email": os.environ["BACKUP_CLIENT_EMAIL"],
"private_key_id": os.environ["BACKUP_PRIVATE_KEY_ID"],
"private_key": os.environ["BACKUP_PRIVATE_KEY"],
}
credentials = ServiceAccountCredentials.from_json_keyfile_dict(
credentials_dict
)
client = storage.Client(credentials=credentials, project="aerobic-copilot-232607")
bucket = client.get_bucket("tgtree")
blob = bucket.blob("temp.png")
blob.upload_from_filename("./temp.png")
# How to I upload from DATA?
url = blob.public_url
print(url)
Вопросы:
Как мне перехватить save()
функцию и получить фактические байты данных из self.data
?
Как только это будет сделано, какая функция blob для передачи этого в blob.upload
?
Если бы python не был динамически типизирован, было бы легко увидеть, что где подходит, но это не так.
Ответ №1:
Вы получите данные в виде self.data.read()
пример :
def save(self, *args, **kwargs):
super(TestFile, self).save(*args, **kwargs)
filename = self.data.url
print("FILENAME: " filename)
data_in_bytes = self.data.read()
Ссылка : class FieldFile