Хостинг Django от «Джино»
Table of contents

Глава 11. Генерация данных, отличных от HTML

Данная глава временно взята из первой версии книги и подлежит корректировке. Вы можете помочь с этим!

Перевод © Попов Руслан <radz • yandex • ru>

Обычно, говоря о разработке веб сайтов, мы имеем в виду генерацию HTML. Конечно, кроме HTML в сфере веба существует ещё много чего. Мы используем веб для распространения информации во всех форматах: RSS, PDF, изображения и так далее.

До сих пор мы рассматривали общий случай создания HTML, но в этой главе мы пойдём другим путём и рассмотрим возможности Django для генерации других видов контента.

Django обладает удобными встроенными инструментами, которые можно использовать для создания контента, отличного от HTML:

  • Рассылки RSS/Atom.

  • Карты сайтов (в XML формате, разработанном Google, который очень помогает поисковым машинам).

Мы исследуем каждый из этих инструментов немного позже, сначала рассмотрим основные принципы.

Основы: представление и MIME-типы

Помните из главы «Представления и привязки 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.


Ищем Python программистов

Found misprint?
Select it with the mouse and hit Enter
Ctrl-Enter
Processed:
33 1 199 25


The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!

We are glad to hear your questions, comments or suggestions!
(Open in new tab)

Users number: 601

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
ЯМ:41001223475816


© 2008-2012 Ruslan Popov @ gmail.com Powered by Django 1.2.5