Публикации о языке Python   страница 295

musicmans.ru | Как сделать сайт на Django | Пользователи

Наконец-то мы добрались до самого сладкого. Начнем с приложения users. Мы помним, что в django, как и в python надо писать приложения, а не проекты, чтобы соблюдать принцип DRY. Это основное приложение, которое требуется почти в каждом проекте. Несмотря на то, что в django уже есть django.contrib.auth, класс models.User содержит только минимальный набор полей. Расширение полей этого класса существует в следующих вариантах.
Создадим и переключимся в ветку users.
Перед тем, как создавать приложение, создадим темплейт для сайта - base.html и поместим его в директорию /src/tem




Python datetime to javascript Date

В Django есть DjangoJSONEncoder, который используется при конвертировании данных в json-формат. Он форматирует дату в строку. Пришлось написать свой енкодер, что бы на клиенте получать обьект Date, а не строку.

Copy Source | Copy HTML
  1. from django.utils import simplejson
  2.  
  3. class DatetimeJSONEncoder(simplejson.JSONEncoder):
  4.  
  5.     class DateInt(int):
  6.         '''
            Наследуемся от int, потому что тогда значение будет без "".
            В других случаях получим: "new Date



Ковертируем текст из файла в utf8

Понадобилось читать из файлов субтитры, парсить и складывать в БД. Как всегда проблемы с кодировкой. Гугл подсказал вот такой вот модуль: сhardet.

Copy Source | Copy HTML
  1. import chardet
  2.  
  3. text = subtitles.read()
  4. text = unicode(text, chardet.detect(text)['encoding'])
  5.  



Подгрузка связанных моделей, ч.2

Собственно пылятся еще две функции, неизвестной полезности, для подгрузки связаных моделей: для GenericForeignKey и ForeignKey(null=True). Работало на Django 1.1. Думаю с небольшим "допилом" будет и на 1.2 работать. Все это делалось для комментариев. Первой ф-цией подгружали комментируемые обьекты, а второй - пользователей, которые комментировали.


Copy Source | Copy HTML
  1. def load_related_generic(object_list, field='content_object'):
  2.     if not object_list:
  3.         return object_list
  4.  
  5.     related_field = getattr(object_list.model, field)
  6.     ct_field = object_list.model._meta.get_fie



musicmans.ru | Как сделать сайт на Django | Развертывание

Я обещал выкладывать все этапы работы на http://musicmans.ru, поэтому настала пора вывесить табличку "Сайт в разработке" :), заодно наладив работу развертывания.

Итак, задачи: создать приложение по вводу сайта в режим обслуживания, настроить сервер, автоматизировать процесс развертки на сервер с помощью fabric.

Вспомним о том, что у нас есть redmine и mylyn, создадим данные задачи (не забываем создать категории задач в настройках проекта в redmine).

django-maintenancemode

Для ввода сайта в режим обслуживания есть целое приложение.

Устанавливаем:


C:\>c:\Python26\Scripts\pip.exe install django-maintenancemode
Downloading/unpacking django-maintenancemode



Django 1.2.1 и load_related_m2m

Интро Думаю, многие из нас занимались оптимизацие загрузки данных из полей ManyToManyField. Задача для оптимизации проста: есть коллекция объектов с некоторым полем (полями) М2М. Необходимо выбрать данные для поля М2М одним запросом, т.е. не выполнять для каждого объекта из коллекции отдельный запрос, по загрузке однотипных данных. Думаю, многие для этого писали собственные функции, я же [...]




В четверг в Одессе, в субботу в Киеве

Завтра приму участие в Яндекс конференции.

Онлайн трансляция будет тут


В субботу в Киеве. Вот анонс который прислал Сергей.

Вітаю!

Цього тижня, у суботу відбудеться зустріч Kyiv GTUG,
київської групи користувачів технологій Google. На цей раз до нас
знову завітає Кріс Шабо, який працює над соціальними сервісами у офісі
Google у Маунтін-В'ю, і розкаже про Buzz API, який було представлено
на конференції Google I/O в травні. Будь ласка, ознайомтеся з його
виступом на цій конференції:
http://code.google.com/events/io/2010/sessions/google-buzz-apis.html

Також Михайло Кашкін продовжить цикл лекцій про Google App Engine.
Також раджу подивитися його попередні виступи:



Одесса FOSS: результаты

Имел несчастье принять участие в качестве докладчика на Одесском FOSS'е организованном Дмитрием Сподарцем. И вот сейчас кажется история сделала оборот и могу со стороны выссказать свое мнение о событии и организации и самой конференции.

Сравнивать буду с GTUG конференцией которую организовал Сергей Каук, и PyCamp организованную 42 Coffee Cups. К этим организаторам есть 2 несущественные претензии: Сергей почему-то думал, что он что-то не успел или сделал не достаточно хорошо (все было отлично), а оператор PyCamp'а отрезал смешной экспромт до начала выступления (видео с ним появилось на пару дней позже). Все было отлично, искреннее уважение к организаторам с удовольствием приму участие в их следующих мероприятиях.

WebCamp был сделан на порядок хуже. У меня было 2 условия: быть не первым и иметь видео. После первой встречи и этих договоренностей возникла тишин




musicmans.ru | Как сделать сайт на Django | Миграция моделей и данных

В прошлый раз мы остановились на том, что запустили django на машине разработчика. Использование virtualenv оставим на самостоятельное рассмотрение. А вот pip мы все-таки установим. Тем более, что у нас в проекте уже лежит пустой файл requirements.txt - файл формата pip, со списком приложений, необходимых для нашего проекта. Кстати, пора в него уже прописать:
Django==1.2.1
South==0.7.2

Далее, качаем pip, разархивируем, устанавливаем:
#apt-get install python-setuptools
pip-0.7.2#python setup.py install

Теперь перейдем к теме.

South привносит в django возможность миграции структуры и данных модели. На практике это означает, что если мы что-то поменяли в модели (добавили/удалили поле) то south сам увидит изменения и создаст инструкци




musicmans.ru | Как сделать сайт на Django | Cтруктура проекта

Структура проекта может быть по вашему вкусу. Тут нет каких-то жестких правил, хотя правила в создании django приложений (не проекта) все-таки есть. Итак, приведем в пример структуру pinax сайта проекта:


apps
deploy
media
site_media
templates
tests

__init__.py
context_processors.py
manage.py
urls.py
settings.py

Мы подсмотрим у профессионалов, virtualenv мы использовать не будем, поэтому немного подсократим:

PROJECT_ROOT/
|-- apps/ # Django приложения сайта
|-- etcs/ # Разные конфигурационные файлы
|-- settings/ # Настройки
|-- templates/ # темплейты для всего сайта
|-- __init__.py # Инициализация пакета python
|-- requirements.txt #файл формата pip со списком приложений для сайта
|-- m