J'utilise Matplotlib dans une application Django et souhaitez renvoyer directement l'image rendue.
Jusqu'à présent, je peux aller Ce que je veux faire est: p> plt.savefig (...) code>, puis renvoyer l'emplacement de l'image. return HttpResponse(plt.renderfig(...), mimetype="image/png")
4 Réponses :
Employer du duchagetyping et transmettez un objet à votre origine, dans le déguisement de l'objet de fichier Vous pouvez utiliser myFile = stringio.stringio () au lieu du code réel et renvoyer des données en réponse, par exemple < / p>
Cela fonctionnerait assez bien, mais comme WIEROB mentionné, HTTPRESPonse prend déjà en charge l'accès au dossier (que je n'ai pas réalisé). Donc, vous pouvez ignorer la création de votre propre classe. Quiconque fait quelque chose de similaire à l'extérieur de Django, cela ressemble vraiment à une bonne idée.
En fait, je ne crée pas ma propre classe qui n'était qu'une possibilité, comme je l'ai dit User Stringidio, et oui avec l'objet de réponse lui-même est le meilleur.
Quoi de Cstringio ?
Hmm, cela fonctionnerait pour d'autres systèmes, mais je ne pense pas que Django gérerait très bien l'impression directe car elle utilise des objets HTTPResponse pour toute sa communication sortante.
@darwinSuvivor, d'accord avec vous, je veux juste montrer que Saviserfig sur un objet cstringio.stringio () est identique à celui de Saviserfig vers le fichier PNG. Après cela, il n'est pas nécessaire d'utiliser Imprimer ici. Il semble que la réponse de Wierob est complétée à notre situation actuelle.
Par conséquent, vous pouvez renvoyer l'image directement dans le HTTPResponse > Object prend en charge l'API de type Fichier et vous pouvez transmettre un objet-fichier à Savisterfig. httpresponse code>. p> p>
Il y a quelques autres suggestions qui semblent fonctionner, mais cela ressemble vraiment à la tâche la plus facile à utiliser. Je n'ai qu'à ajouter environ 2 ou 3 lignes de code! Merci
Il y a une recette dans le Cookbook MATPLOTLIB qui fait exactement cela. À son noyau, on dirait:
canvas=FigureCanvas(fig)
response=django.http.HttpResponse(content_type='image/png')
fig.savefig(response, format='png')
return response
Y a-t-il une différence (vitesse, efficacité, etc.) entre l'utilisation de canvase.print_png et simplement de faire une sauvegarde_fig () sur le HTTPResponse?
Vous devrez mesurer la différence de vitesse, mais il y a une différence de présentation comme indiqué dans la modification. Cela ne dépend également pas des fonctions d'emballage PYLAB / PYPLOT, que j'aime pour ce type d'application.