Вот и подошел к концу первый этап разработки www.russned.tv – это видеохостинг на django. Из названия ясно, что сайт сделан для наших друзей - Русской недели. При разработке использована куча всяких django-приложений:
- django-cms (с кучищей плагинов)
- django-profile (понадобиться для регистрации и, поздней, для добавления роликов пользователями)
- django-ratings
- django-ajaxcomments
- + набор собственных приложений, которые теперь переносятся из проекта в проект.
У некоторых роликов есть полная avi-версия.
Django-сообществу возможно, будут интересны следующие куски кода этого проекта:
1. Список последних просмотренных роликов
videos = MyVideo.objects.annotate(last=Max('videoview__when')).order_by('-last')[:limit]
Между прочим, универсальный вариант GROUP BY средствами django ORM’а.
2. Ролики отсортированные по соотношению рейтинга к кол-ву голосов:
videos = MyVideo.objects.extra(select={
'a_rating': 'rating_score/rating_votes'
}).order_by('-a_rating')[:limit]
Это специфика использования djangoratings – кто использовал поймет ;)
3. Ролики с сортировкой по кол-ву комментариев (только откомментированные):
videos = MyVideo.objects.annotate(comments_count=Count('comments')).\
exclude(comments_count=0).order_by('-comments_count')[:limit]
В основе файл models:
class MyVideo(models.Model):
...
title = models.CharField(_(u'название'), max_length=250, unique=True)
desc = models.TextField(_(u'описание'), max_length=250, null=True, blank=True)
category = models.ForeignKey(Category, verbose_name=_(u'категория'), blank=True, null=True)
tags = TagAutocompleteField()
rating = RatingField(range=5, weight=1, can_change_vote=True, allow_anonymous=False)
comments = generic.GenericRelation(Comment, content_type_field="content_type", object_id_field="object_pk")
class VideoView(models.Model):
video = models.ForeignKey(MyVideo)
when = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, null=True, blank=True, editable=False)
Смотрите, качайте, советуйте друзьям! www.russned.tv.

