Poiché questo è stato il primo risultato sulla mia ricerca su google e la risposta migliore è sepolta nel link da Daniel (ma non menzionata come la migliore), ho pensato di pubblicare la risposta in modo che nessuno fosse tentato di restituire un vuoto risposta che, come sottolinea Michael, non è l'ideale.
La soluzione consiste nell'utilizzare una visualizzazione standard e restituire una HttpResponse con i dati non elaborati che costituiscono un singolo pixel gif. Non dover colpire il disco o il reindirizzamento è un enorme vantaggio.
Si noti che il modello di URL utilizza il codice di monitoraggio come nome dell'immagine, quindi non vi è alcun evidente? Code = jf8992jf nell'URL.
from django.conf.urls import patterns, url
from emails.views.pixel import PixelView
urlpatterns = patterns('',
url(r'^/p/(?P<pixel>\w+).gif$', PixelView.as_view(), name='email_pixel'),
)
Ed ecco il punto di vista. Si noti che utilizza cache_control per impedire che le richieste vengano eseguite in modo selvaggio. Ad esempio, Firefox (insieme a molti client di posta elettronica) richiederà l'immagine due volte ogni volta per qualche motivo che probabilmente non ti interessa, ma devi preoccuparti. Aggiungendo max_age = 60 otterrai solo una richiesta al minuto.
from django.views.decorators.cache import cache_control
from django.http.response import HttpResponse
from django.views.generic import View
class PixelView(View):
@cache_control(must_revalidate=True, max_age=60)
def get(self, request, pixel):
"""
Tracking pixel for opening an email
:param request: WSGIRequest
:param pixel: str
:return: HttpResponse
"""
# Do whatever tracking you want here
# Render the pixel
pixel_image = b'\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\xff\xff\xff\x00\x00\x00\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3b'
return HttpResponse(pixel_image, content_type='image/gif')
il tipo di contenuto I risponde con la domanda? – MattoTodd
Sì, dovresti probabilmente renderlo immagine/png. –
Per la cronaca, ho notato che l'invio di una risposta vuota può essere problematico - almeno in gmail su Chrome, che risulta nel glifo di un'immagine spezzata che appare nel messaggio. È meglio trasmettere in streaming un'immagine banale [come suggerito da Russell Keith-Magee] (https://groups.google.com/forum/#!topic/django-users/-xiaSqXdWvc). –