Ponieważ był to pierwszy wynik w mojej wyszukiwarce Google, a najlepsza odpowiedź jest ukryta w łączu Daniela (ale nie wspomniano o tym jako najlepsza), pomyślałem, że po prostu podałbym odpowiedź, aby nikt nie miał ochoty zwracać pustego Odpowiedź, którą Michael wskazuje, nie jest idealna.
Rozwiązaniem jest użycie standardowego widoku i zwrócenie HttpResponse z surowymi danymi, które składają się na pojedynczy piksel. Brak konieczności uderzania dysku lub przekierowania to ogromna zaleta.
Należy pamiętać, że wzorzec adresu URL używa kodu śledzenia jako nazwy obrazu, więc nie ma oczywistego kodu? Code = jf8992jf w adresie 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'),
)
A oto widok. Zwróć uwagę, że używa on opcji cache_control, aby zapobiec uruchamianiu żądań. Firefox (wraz z wieloma klientami poczty e-mail) na przykład poprosi o dwa razy obraz z jakiegoś powodu, którego prawdopodobnie nie obchodzi, ale musi się martwić. Przez dodanie max_age = 60 otrzymasz tylko jedno żądanie na minutę.
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')
Czy typ zawartości odpowiada z materią? – MattoTodd
Tak, prawdopodobnie powinieneś zrobić obraz/png. –
Zauważyłem, że wysłanie pustej odpowiedzi może być problematyczne - przynajmniej w Gmailu w Chrome, co powoduje pojawienie się uszkodzonego obrazka w wiadomości. Lepiej jest przesyłać banalne obrazy, jak sugeruje Russell Keith-Magee (https://groups.google.com/forum/#!topic/django-users/-xiaSqXdWvc). –