Comment puis-je envoyer multipart/form-data qui contient de l'objet json et le fichier image via curl? Et comment puis-je traiter avec Django Repos Cadre?
Pour exemple, j'ai essayé la commande via le terminal:
curl -F "profileImage=@/home/user/image.jpg" -F "{'firstName':'hello'};type=application/json" http://127.0.0.1:8000/api/v1/signup/
Puis j'ai reçu le request
objet comme ça:
print request.FILES
# <MultiValueDict: {u'profileImage': [<InMemoryUploadedFile: image.jpg (image/jpeg)>]}>
print request.DATA
# <QueryDict: {u"{'firstName':'hello'};content-type": [u'application/json']}>
L'image est ok, mais QueryDict n'est pas correctement représentés - tous les fichier JSON est une clé et le type de contenu
est une valeur.
Dans Django utiliser ces analyseurs:
parser_classes = (MultiPartParser, FormParser, JSONParser,)
J'ai besoin d'envoyer du texte des données via la structure JSON .
ce analyseurs utilisez-vous dans votre point de vue?
parser_classes = (MultiPartParser, FormParser, JSONParser,) j'ai mis à jour la question
parser_classes = (MultiPartParser, FormParser, JSONParser,) j'ai mis à jour la question
OriginalL'auteur alexche8 | 2014-05-27
Vous devez vous connecter pour publier un commentaire.
Si vous voulez POSTER avec
multipart/form-data
type de contenu, vous ne pouvez pas spécifierapplication/json
. La solution simple est d'envoyer les données du formulaire dans l'url-encodé au format. Essayez cette commande:L'approche ci-dessus va travailler avec un DRF de l'application. Pourquoi avez-vous besoin de JSON? Aussi, voir stackoverflow.com/questions/3938569/... pour plus de discussion.
OriginalL'auteur xjtian
le paramètre pour spécifier le type de contenu est juste "type="
Cependant, je ne pense pas que qui permettra à l'JSONParser de prendre les informations..., mais vous pouvez essayer 🙂
Ce n'est pas valide l'utilisation de l'option-F. Il fait une demande à la partie nom
{'firstName':'hello'};type
et la valeurapplication/json
OriginalL'auteur Pablo Albornoz
Ici :-
Pas besoin de taper accepte application/json. Django va traiter automatiquement ces comme dictionnaire d'objets.
Demande d'impression.De DONNÉES et de la demande.FICHIERS vous donnera
OriginalL'auteur Dharmanshu Kamra
Je suis venu avec une solution comme ceci:
Il suppose que le JSON partie est envoyée comme un champ de formulaire appelé "data".
Si vous voulez vraiment faire de la nappe, vous pourriez probablement analyser le champ de données selon le type de média de la valeur de l'en-tête Accept. Sinon, vous pouvez afficher les données dans un fichier et les analyser en fonction de son type de contenu.
Notez que pour utiliser cet analyseur de classe, vous aurez besoin de définir les paramètres par défaut suivants:
C'est en raison de ce bug: https://github.com/tomchristie/django-rest-framework/issues/1346
OriginalL'auteur jacob
Grâce xjtian - lien que vous avez collé dans le commentaire + certaines recherches, faire solution.
Donc:
Si vous voulez envoyer des données json + fichier - envoyer des deux demandes. La première, sera de créer un objet sur le backend et donner de l'id d'application. Deuxième mise à jour de l'objet avec le fichier à l'aide de donna des id. Plus d'infos il y.
Si vous n'avez pas de soins sur les types de données - envoyer la demande par l'intermédiaire de "multipart/form-data".
Merci à tous pour les réponses, vous aide vraiment, mais je pense que c'est plus approprié pour le REPOS de l'architecture.
OriginalL'auteur alexche8