Зачем картинку хранить в БД? Если картинка формируется динамически с помощью python-кода, то решение таково:
1) src для img формируется динамически таким образом, что бы в параметрах url-строки были все необходимые для формирования картинки данные
2) в urls.py пишется соответствующий url-адрес с использованием регулярок
3) для данного url пишется соответсвующая функцию view, принимающая параметры из адреса, плюс, возмжно, какие-то параметры из строки Get-запроса. Эта вью возвращает сформированную картинку. Эту вью можно закэшировать. Можно даже не кэшировать, а настроить веб-сервер таким образом, что бы он всяческую статику кэшировал (*.js, *.jpg, *.css и проч.)
Для того, что бы пользователь не смог получить картинку просто введя нужный ему url можно использовать ajax-запросы. Т.е. при щелчке по ссылке внутри страницы (ну или при загрузки страницы) должен запускаться скрипт, котоорый формирует ajax-запрос для получения строки <img src='asfasfsf'>. При этом внутрь вьюхи, отдающей рисунок поставить код:
if request.is_ajax():
формируем и возвращаем картинку
else:
raise Http404()
Таким образом, вьюха будет принимать только соответствующим образом сформированные ajax-запросы. (просто так в адресной строке src картинки уже не введешь). Правда если будет работать парсер, то он все равно сможет это обойти формируя соответствующим образом запросы (но это все равно довольно сильно усложнит дело).
Есть еще более крутой вариант:
на странице делаешь форму с одной единственной кнопкой “показать рисунок”, к ней привязываешь соответствующий скрипт, который все так же через ajax-подгружает данные в виде рисунка на страницу. метод формы - post. и добавляешь {% csrf_token %}. Так еще больше усложним задачу парсеру.