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 комментариев:

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

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

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

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

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

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

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

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

    ОтветитьУдалить
  8. А сами видеофайлы никак не конвертируете?

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

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

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

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

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

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

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

    ОтветитьУдалить
  13. http://www.russned.tv/about/
    выдает Page not found (404)

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

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

    ОтветитьУдалить