14 мая 2010 г.

www.russned.tv

Вот и подошел к  концу первый этап разработки 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.

15 комментариев:

Scailer комментирует...

tags = TagAutocompleteField()
а можно по подробнее про этот филд?

Ivan Markeev комментирует...

Да. Это от django-приложения http://code.google.com/p/django-tagging-autocomplete/ - чрезвычайно полезная штука. Виджеты автодополнения как для морды, так и для админки. Установка очень простая: http://code.google.com/p/django-tagging-autocomplete/wiki/ReadMe

Ivan Markeev комментирует...

Кстати, я уже писал о django-tagging-autocomplete: http://markeev.labwr.ru/2010/02/django.html

Unknown комментирует...

А что за ПГМнутые товарищи? Какие-то православные фильмы.

Ivan Markeev комментирует...

Грубовато как-то... Нормальные ребята, делают полезное дело - занимаются духовным воспитанием и просветительской деятельностью. Опять же, никому не навязываются. Почему ПГМнутые?

Unknown комментирует...

Не нужно говорить за всех. Уверен, что многие из них только и делают, что навязываются. :)

Да я просто из тех, кто считает религию душевной болезнью.

Ivan Markeev комментирует...

Из кого это "из них"? Вы лично знакомы с сотрудниками Русской недели? Балбесов везде хватает, но всех под одну гребенку чесать - преступление против здравого смысла.

Alexander Dinu комментирует...

А сами видеофайлы никак не конвертируете?

Ivan Markeev комментирует...

Пока нет, но когда добавим загрузку роликов пользователям, придется добавлять конвертирование...

Unknown комментирует...

Интересное обсуждение. Вместо разбора технической стороны перешли на ПГМ 8) Классика.

Всем привет!
Петр

Ivan Markeev комментирует...

Да, не корми тролля.;)

Artem Sapegin комментирует...

Было бы очень интересно почитать о ваши собственных приложениях, которые переползают у вас из проекта в проект.

Страница логина на сайте уж очень адская :)

1. Заумное слово «Аутентификация».
2. Микроскопическая кнопка «Войти».
3. И почему «Свойства»?

Ivan Markeev комментирует...

Форма логина из django-profile. Русификацию там адская, но это, опять же, равно мой косяк.
Спасибо за замечания, всё исправлю!

FeNUMe комментирует...

http://www.russned.tv/about/
выдает Page not found (404)

но это фигня по сравнению с тем что продакшн сервер работает в режиме DEBUG = True

Ivan Markeev комментирует...

Грешен, каюсь. Правил ошибку прям на продакшене и забыл отключить.
Кстати, прошел по ссылке в Ваш блог, выкачал книгу по джанго. Спасибо!