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.