2

Je suis nouveau sur django et je suis en train de concevoir des modèles de base qui contiennent FileFields.Téléchargement de fichiers Django via l'API

Voici un exemple de mon modèle:

class Sample(models.Model): 
    pub_date = models.DateTimeField('Publish Date', default=datetime.now) 
    upfile  = models.FileField(upload_to='samples/') 

J'ai testé le téléchargement de fichiers via admin, mais maintenant je suis à la recherche d'autres solutions pour envoyer des fichiers via l'API REST. Mes premières recherches mènent à Piston mais la plupart des exemples ne semblent pas impliquer des modèles, seulement le téléchargement de fichiers vers des sites Web.

Mon objectif est d'analyser les répertoires, par exemple avec os.walk, et de soumettre les fichiers et de remplir le modèle avec les informations du fichier.

Cela dit, je cherche des suggestions et des pistes afin de commencer à enquêter.

Merci d'avance!

Répondre

8

Vous ne devriez probablement plus vous tourner vers le piston pour les nouvelles constructions. Il est essentiellement non maintenu et a été pendant un moment maintenant. django-tastypie et django-rest-framework sont vos meilleurs paris, bien qu'il y ait aussi un tas de frameworks moins complets.

cadre REST prend en charge le téléchargement de fichiers codés sous forme standard, voir http://django-rest-framework.org/api-guide/fields.html#filefield

Je ne suis pas sûr du soutien de tastypie pour le téléchargement de fichiers.

+0

Merci pour vos commentaires Tom, je vais considérer votre suggestion concernant d'autres alternatives à Piston. En ce qui concerne mon problème, j'ai fini par revenir aux bases et, comme le téléchargement se produit sur le même serveur que django, j'ai créé un script simple pour appeler le modèle File et Sample. Je vais détailler ça dans mon post. – karamazov

+1

L'une des principales raisons pour lesquelles je suis passé de tastypie à django-rest-framework est la simplicité du téléchargement de fichiers dans ce dernier ... –

1

Je suis retourné à l'essentiel et j'ai décidé d'essayer de créer un script local qui lit les appels File et le Sample Model. Comme je vais soumettre des fichiers directement depuis le même serveur, cette solution est infiniment plus simple que l'utilisation d'une API REST, qui offre plus de flexibilité que ce dont j'ai besoin.

C'était ma solution:

import os 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 
import sys 
sys.path.append('/opt/proj') 
sys.path.append('/opt/proj/web') 
from django import db 
from django.core.files import File 
from django.utils import timezone 
from web.myapp.models import Sample 

filesample = File(open(sys.argv[1],'rb')) 
filesample.name = os.path.basename(filesample.name) 
Sample(upfile=filesample, pub_date=timezone.now()).save() 

ce retour était recherchez incroyablement simple, mais j'espère que cela peut aider quelqu'un avec le même problème.

N'hésitez pas à commenter. Merci!

Questions connexes