Creé una API de publicación que cargará imágenes y videos para blogs. Puedo manejar múltiples imágenes, no hay problema allí. Pero también tengo que enviar un video desde la interfaz. He usado Filefield para video. No soy un experto en apis pero lo que pienso es que como el código que he escrito es sincrónico, todo lo que he escrito se hará al mismo tiempo. Ahora, el problema es que si un usuario desea cargar un video muy grande, por ejemplo, de 200 a 500 mb, la respuesta a la llamada posterior a la API será muy larga. ¿Hay alguna manera de que pueda guardar primero la publicación del blog, devolver la respuesta y luego comenzar a cargar el video en la base de datos del servidor en vivo?
Mis modelos:
class Blogposts(models.Model): blog_title = models.CharField(max_length=100blank=True) video = models.FileField(upload_to="media", null= True)Traté de usar señales de django, pero, de nuevo, las señales de django también son síncronas. Todo lo que dije anteriormente también podría estar mal, no estoy seguro. Pero, ¿cómo abordar esto? ¿O debería usar apio django?
DRF ya tiene actualizaciones parciales. Usa eso. Es decir, realiza una solicitud de publicación solo para los campos que no son de archivo. Haga que el campo de video en blanco sea verdadero nulo verdadero.
Una vez que se hace con éxito, obtienes la identificación de tu publicación en respuesta. Luego haga una solicitud de parche para cargar el archivo.
Su algo de javascript puede verse más o menos así
const handleFormSubmit => (data) { file = data.video_file; delete data.video_file; axios.post('/blogs/', data).then(response => { updateUiShowCreatedBlogWithVideoUploading(); id = response.id; fileUploadRequestData = { file: file } axios.patch('/blogs/${id}/', file).then(response => { updateUiShowCreatedBlogWithVideoUploaded(); }); }); }Pero, en general, para archivos grandes, los subiría directamente a un almacén de objetos (como S3) desde el navegador y no me molestaría en el proceso de django. Una vez hecho esto, adjunte el objeto como en el parche. En este caso, su modelo será solo un campo de URL y no FileField.
Si eso es demasiado, al menos use django-storages y deje que la biblioteca maneje la carga a S3 desde su backend.