Chaque pièce partie dans un document multipart/form-data
peut avoir ses propres en-têtes , par ex. une section peut avoir un en-tête Content-Type: text/plain
. Ces parties peuvent être téléchargées à partir d'un formulaire Web, par exemple.Comment puis-je définir les en-têtes des parties multipart/form-data avec django.test.Client?
En the documentation for Django's UploadedFile
class, je lis
UploadedFile.content_type
L'en-tête de type de contenu téléchargé avec le fichier (par exemple text/plain ou application/pdf). Comme toutes les données fournies par l'utilisateur, vous ne devriez pas croire que le fichier téléchargé est réellement ce type. Vous devrez toujours valider que le fichier contient le contenu que l'en-tête de type de contenu prétend - "confiance mais vérifier."
Bon, je devrais valider le fichier par rapport au type de contenu revendiqué. Alors bien sûr, maintenant je dois écrire des tests qui testent si mon serveur valide réellement le type de contenu correctement. Un tel test serait de faire une demande à mon serveur avec content-type: multipart/form-data
, où au moins une partie a un contenu qui est incompatible avec son type de contenu.
Comment est-ce que je peux faire ceci? The django.test.Client class has a post
method qui peut envoyer des demandes avec le type multipart/form-data
. Les parties multiples du corps de la requête sont passées à la méthode en tant que dictionnaire. Les clés de ce dictionnaire sont des chaînes, et les valeurs sont soit des chaînes, soit des "objets de fichiers".
Je veux comprendre:
- comment ce dictionnaire est converti en un corps de demande
multipart/form-data
. Quels sont les en-têtes sur chaque partie? - comment définir manuellement des en-têtes arbitraires sur chaque partie. Comment, par exemple, puis-je spécifier manuellement un en-tête
Content-Type: text/plain
?
Ceci pour la réponse; c'est utile. Je vais cependant laisser la case non cochée, jusqu'à ce que quelqu'un puisse me diriger vers une API Django documentée pour faire ce dont j'ai besoin. – jameshfisher
Je cherchais ça mais je ne pouvais pas en trouver un :(Mais je n'ai peut-être pas eu l'air assez dur ... En tout cas, merci! –