Sunday, May 13, 2012

3.2 обновление - RSS feed, Updates на главной и аудио плэер в постах

За последнюю неделю мы достаточно плотно поработали над сайтом и наконец настал момент, когда изменений накопилось на очередной (плановый?) апдейт сайта.

С RSS и апдейтами (которые news) на главной оказалось достаточно просто generic relations позволили увязать множество различных моделей в одну таблицу - Updates, куда так же записывается краткая информация (title и description) после сохранения поста (используя signals, сигналы).


class Updates(models.Model): 
    title = models.CharField(max_length=160)
    description = models.CharField(max_length=255)
    
    display = models.BooleanField(blank=True, default=False,
                                  help_text="Display this on front page")
    updated = models.DateTimeField(auto_now_add=True)
    
    content_type = models.ForeignKey(ContentType, editable=False)
    object_id = models.PositiveIntegerField(editable=False)
    content_object = generic.GenericForeignKey('content_type', 'object_id')


Для каждой модели так же определен метод -  def get_item_for_update(self) который должен сгенерировать title и description использя данные новости, эвента и т.д.

Затем уже используя эту таблицу формируется общий RSS фид. Так же реализовал возможность редактировать эти апдейты через интерфейс администратора, на всякий случай.

Audio-player


Встроил вот такой - http://wpaudioplayer.com/standalone/
Теперь посты в Stuff (и других разделах) можно иллюстрировать аудио-фрагментами, что позволит полноценно заняться написанием различных how-to и tutorials.

Сделано через filter тэг, который ищет (регулярным выражением) строчки вида [audio:http://someurl.com/file.mp3] и заменяет их собственно кодом плэера.


Сейчас буду накатывать.

Thursday, May 10, 2012

Апдейт Artist, релизы и подкасты.

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

Это было достаточно просто - один запрос вида :
Release.objects.filter(title__icontains=self.nickname).order_by('-release_date')



Заодно порефакторил там код, чутка изменил модель, сдедал миграции с помощью django-south.

Через несколько часов будут накатывать новую версию сайта.

Wednesday, May 9, 2012

Рефакторинг, rss и abstract-base-classes

Начал делать рефакторинг, без него уже не обойтись.

 

Cуть проблемы


В ходе разработки было сделано несколько отдельных приложений (django apps) для различных частей сайта - news/events/stuff и вообщем как-то так вышло, что они имеют общие части, которые правильнее было бы вынести в отдельный класс (а точнее abstract-base-classes), чтобы затем сократить количество кода, а так же улучшить его понимание.

Построение RSS фида


Так же встал вопрос чтобы выводить все апдейты на главную, что придется делать используя generic relations, т.е. создавать отдельную таблицу где будут сохраняться апдейты для каждого приложения news/events/stuff/podcasts/releases и т.д. Что так же решит проблему построения общего RSS фида для всех этих разношерстных компонентов сайта.

Осталось только потихоньку привести модели к общему виду, посредством миграций, используя django-south.

Так же хотелось бы в конечном итоге перейти на эти новые жанговские Class Based Views.

Wednesday, April 18, 2012

Апнули сайт до версии 3.1

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

Ударно поработав сегодня исправил кучу мелких багов в css, разместил метрики от yandex/google и т.д.

Из "major" фич - появление раздела Stuff в котором будут публиковаться сэмплпаки, пресеты, видео, статьи.

Так же, чтобы текстовое наполнение сайта в разделах выглядело поприличнее было принято волевое решение позаимствовать типографику в Twitter Bootstrap. Частично это было сделано, но я думаю в будущем всплывут неучтенные моменты, в частности таблицы.

Помимо этого на повестке дня стоят такие вопросы как:

  • RSS
  • Вывод общей ленты разделов на морду сайта (нужно рефакторить)
  • написать пару fabric скриптов для фикса нескольких неприятных "фич" при деплое/обновлении проекта
  • выводить списки категорий (с картинками) для каждого раздела
  • интегрировать фотографии и видео в сайт (используя Flickr API и YouTube API)
  • Плотнее использовать API SoundCloud для интеграции аккаунта на сайт
  • сделать возможно форму для залива треков/демо

Tuesday, April 17, 2012

Разработка нового сайта tamrecords

Не так давно вывалили в продакшн новую версию сайта лэйбла Tamrecords. Товарный вид присутствует, однако работы еще немерянно.

Итак, почему решили полностью с нуля написать движек сайта?

Причин этому несколько: во первых хотелось бы придать сайту более товарный вид,  во-вторых избавится от адского php/wordpress'а который ну никак не подходит для серьезной организации работы интернет-лэйбла.
 
Еще немаловажная причина, как вы могли заметить заметно возрасла скорость работы, со стороны сервера я наблюдаю весьма экономное потребление памяти. Раньше, когда выходил очередной подкаст, сайт работал крайне не стабильно - "вешался", сейчас такого даже близко не происходит, хотя я пока еще не перенес даже базу из sqlite на mysql (лол). Думаю после переезда на связку uWSGI/Nginx будет еще круче.

Из технологий решили остановиться на связке python/django как отвечающую всем современным требованиям. Немаловажный фактор - скорость разработки конечных приложений которую обеспечивает продуманная архитектура (админка например) фрэймворка django + наличие массы готовых компонентов/примеров которыми можно воспользоваться.

В этом блоге я собираюсь публиковать новости о том, как проходит сам процесс разработки, и какие фичи добавляются.

Свежая версия будет находиться по адресу http://tamp3cords.com/