J'utilise Django pour faire un traqueur de pixels sur un email p>
est-il facile de renvoyer une image réelle d'une vue Django (et comment cela se ferait-il?) Ou est-il plus facile de simplement retourner une redirection à l'URL où l'image réelle vit? p>
4 Réponses :
django a un Fichier statique assistant qui pourrait être utilisé pour Servir l'image, mais il n'est pas recommandé en raison de la performance. Je crois qu'avoir une vue qui fait la comptabilité de suivre le pixel, puis redirige vers une URL qui sert l'image réelle via le serveur Web va vous donner la meilleure performance. P>
Vous n'avez pas besoin d'une image réelle pour un pixel Tracker. En fait, il vaut mieux si vous n'en avez pas. P>
Utilisez simplement la vue comme source de la balise d'image et de renvoyer une réponse vide. P>
Le type de contenu je répond-je avec la matière?
Oui, vous devriez probablement en faire image / png.
Pour l'enregistrement, j'ai remarqué que l'envoi d'une réponse vierge peut être problématique - au moins dans Gmail sur Chrome, ce qui entraîne une glyphe d'image cassée apparaissant dans le message. Il est préférable de diffuser une image triviale, comme suggéré par Russell Keith-Magee .
Étant donné que c'était le premier résultat de ma recherche Google et que la meilleure réponse est enterrée dans le lien de Daniel (mais non mentionné comme le meilleur), j'ai pensé que je voudrais simplement poster la réponse afin que personne ne soit tenté de retourner une réponse vierge Ce que, comme un point de Michael, n'est pas idéal.
La solution consiste à utiliser une vue standard et à renvoyer une page HTTPResponse avec les données brutes qui constituent un gif de pixel unique. Ne pas avoir à toucher le disque ou le redirection est un avantage énorme. P>
Notez que le motif d'URL utilise le code de suivi comme nom d'image afin qu'il n'y ait pas d'évidence? CODE = JF8992JF dans l'URL. P> et voici la vue. Notez qu'il utilise Cache_Control pour empêcher les demandes d'exécuter sauvage. Firefox (avec de nombreux clients de messagerie), par exemple, demandera l'image deux fois à chaque fois pour une raison quelconque, vous ne vous souciez probablement que de vous inquiéter. En ajoutant max_age = 60, vous obtiendrez une demande par minute. P>
Il convient de noter que dans python3 pixel_image code> devrait être préfixé < / a> avec
B code>, de sorte qu'il est de type
octets code> et non
str code>. Sinon, la réponse ne sera pas une image réelle et entraînera toujours la glyphe d'image cassée que Michael mentionne.
Merci pour la mise à jour @alxs - j'ai mis à jour le code exemple pour inclure B code>.
Cette réponse n'a pas fonctionné pour moi. Au lieu de cela, j'ai trouvé une solution chez gist.github.com/simonw/10235798 qui fournit ce qui suit Réponse: pixel_gif_data = base64.b64decode (B "R0LGODLHAQABAIAAAAAAAP /// YH5BAEAAAAAALAAAAAAAAAAAAAAAAAA AABAAAAAAABRAA7") Code>
python2.x: strud> python3.x: strong> p> Source: strong> https://gist.github.com/simonw/10235798 < / a> p> p>