Содержание
Данная глава временно взята из первой версии книги и подлежит корректировке. Вы можете помочь с этим!
Перевод © Попов Руслан <radz • yandex • ru>
Обычно, говоря о разработке веб сайтов, мы имеем в виду генерацию HTML. Конечно, кроме HTML в сфере веба существует ещё много чего. Мы используем веб для распространения информации во всех форматах: RSS, PDF, изображения и так далее.
До сих пор мы рассматривали общий случай создания HTML, но в этой главе мы пойдём другим путём и рассмотрим возможности Django для генерации других видов контента.
Django обладает удобными встроенными инструментами, которые можно использовать для создания контента, отличного от HTML:
Рассылки RSS/Atom.
Карты сайтов (в XML формате, разработанном Google, который очень помогает поисковым машинам).
Мы исследуем каждый из этих инструментов немного позже, сначала рассмотрим основные принципы.
Помните из главы «Представления и привязки URL» это:
Функция представления, или просто представление, является функцией языка Python, которая принимает запрос и возвращает отклик. Этим откликом может быть HTML контент веб страницы, перенаправление на другую страницу, ошибка 404, XML документ, изображение или что-нибудь ещё.
Более формально, функция представления Django должна:
Принимать экземпляр класса
HttpRequest
в качестве первого аргумента.Возвращать экземпляр класса
HttpResponse
.
Возможность возвращать из представление не-HTML данные лежит в
классе HttpResponse
, а точнее в аргументе
конструктора mimetype
. Определяя MIME-тип, мы
можем указывать браузеру формат возвращаемых данных.
Например, рассмотрим представление, которое возвращает изображение в формате PNG. Для простоты мы просто читаем файл с диска:
from django.http import HttpResponse
def my_image(request):
image_data = open("/path/to/my/image.png", "rb").read()
return HttpResponse(image_data, mimetype="image/png")
Вот так! Если вы замените путь до файла в вызове функции
open()
на путь до реального изображения, вы
можете использовать это очень простое представление для
обработки изображений, а броузер будет отображает их корректно.
Ещё следует помнить о том, что объекты
HttpResponse
работают через стандартный
API для работы с файлами. Это означает, что вы можете
использовать HttpResponse
в любом месте,
где требуется обработать файл.
Для того, чтобы увидеть как всё это работает, давайте рассмотрим как Django генерирует CSV.
0 комментариев | Оставьте комментарий