отслеживание пикселей Django - PullRequest
8 голосов
/ 19 августа 2011

Я использую django для создания пиксельного трекера в электронном письме

Легко ли вернуть фактическое изображение из вида django (и как это будет сделано?) Или проще просто вернуть перенаправление на URL, где находится фактическое изображение?

Ответы [ 4 ]

6 голосов
/ 19 августа 2011

Вам не нужно фактическое изображение для пикселя трекера.На самом деле, лучше, если у вас его нет.

Просто используйте представление в качестве источника тега изображения и верните пустой ответ.

5 голосов
/ 14 февраля 2016

Так как это был первый результат в моем поиске в Google, и лучший ответ скрыт в ссылке Даниэля (но не упомянут как лучший), я решил, что я просто опубликую ответ, чтобы никто не поддался искушению вернуть пустой ответкоторый, как указывает Майкл, не идеален.

Решение состоит в том, чтобы использовать стандартное представление и возвращать HttpResponse с необработанными данными, которые составляют один пиксельный gif.Отсутствие необходимости нажимать на диск или перенаправлять - это огромное преимущество.

Обратите внимание, что шаблон URL использует код отслеживания в качестве имени изображения, поэтому в URL нет очевидного? Code = jf8992jf.

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'),
)

А вот и вид.Обратите внимание, что он использует cache_control, чтобы запретить выполнение запросов.Например, Firefox (наряду со многими почтовыми клиентами) будет запрашивать изображение дважды каждый раз, по какой-то причине, которую вы, вероятно, не волнуете, но должны беспокоиться.Добавив max_age = 60, вы просто получите один запрос в минуту.

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')
2 голосов
/ 19 августа 2011

У Django есть статический файл помощник, который можно использовать для обработки изображения, но это не рекомендуется из-за производительности.Я полагаю, что при наличии представления, которое выполняет бухгалтерию для отслеживания пикселя, а затем перенаправляет на URL-адрес, который передает фактическое изображение через веб-сервер , даст вам наилучшую производительность.

1 голос
/ 08 октября 2018

Python2.x:

from django.http import HttpResponse

PIXEL_GIF_DATA = """
R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
""".strip().decode('base64')

def pixel_gif(request):
    return HttpResponse(PIXEL_GIF_DATA, content_type='image/gif')

Python3.x:

import base64
from django.http import HttpResponse

PIXEL_GIF_DATA = base64.b64decode(
    b"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")

def pixel_gif(request):
    return HttpResponse(PIXEL_GIF_DATA, content_type='image/gif')

Источник: https://gist.github.com/simonw/10235798

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...