2016-09-30 6 views
-1

Existe-t-il un moyen courant d'obtenir les fichiers téléchargés en Python, tout comme $ _FILES est en PHP?Existe-t-il un moyen courant d'obtenir le fichier téléchargé sur plusieurs frameworks Python?

Dans Django, il y a request.FILES['fieldid'], dans Pyramide request.POST['fieldid'], alors que dans Flask request.files['fieldid']. Et tout cela renvoie un type d'objet différent. Cependant, y a-t-il une façon générique d'intégrer cela dans les trois cadres?

Merci!

+1

Pourquoi avez-vous besoin? Il y a l'environnement WSGI sous-jacent avec les données brutes, qui est "équivalent" au PHP brut dans le sens où tout ce qui utilise WSGI utilise son environnement. – davidism

+0

@davidism Je travaille sur une bibliothèque qui stocke le fichier téléchargé et je veux le rendre générique pour tous les frameworks Python. Comment puis-je obtenir l'environnement de WSGI dans tous les cadres? – st3fan

+0

La façon dont cela est généralement géré est que vous écrivez votre bibliothèque puis écrivez des extensions pour les frameworks que vous supportez. Dans ce cas, vous ne voudrez probablement pas de middleware WSGI, car vous devrez analyser le corps multi-parties vous-même et vous assurer de ne pas supprimer les données afin que les frameworks puissent toujours les lire eux-mêmes en aval. – davidism

Répondre

0

Je pense que la réponse est non! Parce que par exemple dans django, la classe HttpRequest qui a l'attribut FILES, est un dictionnaire et est peuplé par d'autres parties de framework. Donc, cet objet est créé et construit par django et seulement hérité de la classe d'objets, donc c'est juste un dictionnaire.

class HttpRequest(object): 
    """A basic HTTP request.""" 

    # The encoding used in GET/POST dicts. None means use default setting. 
    _encoding = None 
    _upload_handlers = [] 

    def __init__(self): 
     # WARNING: The `WSGIRequest` subclass doesn't call `super`. 
     # Any variable assignment made here should also happen in 
     # `WSGIRequest.__init__()`. 

     self.GET = QueryDict(mutable=True) 
     self.POST = QueryDict(mutable=True) 
     self.COOKIES = {} 
     self.META = {} 
     self.FILES = MultiValueDict() 

     self.path = '' 
     self.path_info = '' 
     self.method = None 
     self.resolver_match = None 
     self._post_parse_error = False 
     self.content_type = None 
     self.content_params = None 

Vous pouvez voir le code source complet ici:
https://docs.djangoproject.com/en/1.10/_modules/django/http/request/#HttpRequest