Pull to refresh

Django проект PR Hero: что внутри и полученный опыт

Django *

Я хочу продолжить хорошую традицию:
и рассказать об удачных решениях, примененных в Django проекте PR-Hero.

Я призываю всех поступать так же и делиться своим опытом :) Объясню почему. В нашей команде каждое удачное решение или приложение из одного проекта обязательно использовалось в следующем. Проекты развивались и становились все лучше и лучше.

А что, если делиться опытом не внутри отдела, а целым сообществом российских джангистов?

Что внутри


Наш проект не назвать технически сложным. По сути, это интернет-магазин одной услуги и, внешне, самая сложная часть — оплата через Robokassa.

Внутри все немного интереснее: как в любом хорошем интернет-магазине, мы автоматизируем бизнес-процессы. Например, следим, чтобы каждый этап занимал не больше положенного ему времени, иначе руководитель проекта будет получать гневные робо-письма.

Небольшой пример — возможные примеры состояний заявки:
STATUSES_WORKFLOW = {
    'new': ['owned''cancelled'],
    'owned': ['bullshit''cancelled''wait_payment'],
    'bullshit': [],
    'wait_payment': ['unpayed''cancelled''write_release'],
    'unpayed': [],
    'write_release': ['wait_approval''cancelled',],
    'wait_approval': ['sending_release''cancelled'],
    'sending_release': ['feedback''cancelled'],
    'feedback': ['finished''cancelled'],
    'finished': [],
    'cancelled': [],
}


К сожалению, мы еще только пробуем бизнес-модель и не все до конца автоматизировано. Поэтому сегодня я остановлюсь на внешней части. Немного требований к проекту:
  • возможность быстро изменять тексты на сайте нескольким нетехническим людям;
  • максимальное удобство для клиента;
  • многоязычность.
Ну, и как обещал, приступим к положительному опыту.

dbtemplates


Считаю это приложение жемчужиной среди находок этого проекта :)

DBTemplates предоставляет простейший функционал — хранение и редактирование Django шаблонов в базе данных.

При этом он поддерживает замечательный HTML редактор CodeMirror и хранит всю историю изменений при помощи django-reversion.

Выглядит это примерно так:



Это простое решение полностью удовлетворило наши потребности в изменении текстов на сайте. На другом проекте мы попробовали DjangoCMS, но это просто ад. Скажете, что это не подойдет для пользователей? Может быть, но девочки PR-щики после краткого экскурса успешно правят и создают страницы сайта.

Не обошлось без небольших доработок:
  • команда sync_templates была поправлена для работы с unicode и для автоматического создания файлов при синхронизации с БД;
  • и был написан простенький скрипт, который делает автоматический коммит шаблонов раз в час.
И как ни странно, эта система отлично работает для нашего проекта. Скорее всего, мы выкинем DjangoCMS из e-Legion.ru в пользу dbtemplates.
counter customizable

Пока мы не доделали одну мелочь — редактирование меню и создание новых страниц, но думаю, django-treemenus вполне справится с этой задачей. После внедрения на e-legion расскажу подробнее.

autologin-token


Это приложение я создал в рамках проекта, оно маленькое и недописанное :) Но очень полезное.

Идея простая: разрешить пользователю входить на проект автоматически из электрописем.

Решение: создаем модельку и middleware и мы можем в любую ссылку добавить параметр autotoken=ER2332FFF, и пользователь аутентифицируется на сайте автоматически.
http://pr-hero.ru/manage_request/15/?autologin_token=ER2332FFF
Использовать приложение просто — генерируете токен для пользователя и вставляете в письмо:
data['autologin_token'= AutologinToken.objects.generate(target_user)
Исходный код приложения (сильно не ругайте, не было времени причесать)

django-robokassa


Название приложения говорит о его назначении. Здесь мне сказать практически нечего, кроме Большое спасибо kmike. Я и подумать не мог, что будет все так просто, за полчаса я подлючил сервис к Robokassa.

Платежи с Яндекс Денег, WebMoney, Терминалов и банковских карт без проблем для нас и клиентов падают на расчетный счет.

Есть идея в будущем создать приложения для экрана оплаты, как у Эльбы. Может кто-нибудь подскажет готовое?



django-rosetta


Это приложение оказывает неоценимую помощь в переводе проектов на иностранные языки. Мы уже успешно опробовали в двух проектах: Goozy и PR-Hero.

Перевод нам часто приходится делегировать, например, Goozy был переведен на украинский, хорватский и даже финский. Приходилось пересылать po файлы по почте, давать ссылку на poedit, потом долго мержить и отсылать непереведенные части обратно, попутно давая комментарии что значит та или иная фраза.

Rosetta предоставляет удобный web-интерфейс для редактирования файлов переводов. После того, как мы дописали простенький скрипт, который компилирует po файлы и перезапускает веб-сервер.



Это решение работает идеально! Носители языков полностью самостоятельно переводят портал, сразу наблюдают результат и правят ошибки.

django-localeurl


И последнее на сегодня приложение django-localeurl. Оно решает простую задачу — язык сайта определяется исключительно из ссылки. Например, pr-hero.ru/en/medias или en.pr-hero.ru/medias однозначно указывает на английский сайт.

В предыдущих проектах языки у нас определялись автоматом и хранились в куках, это плохое решение по двум причинам:
– поисковики не смогут добраться до контента в другом языке;
– когда даешь ссылку на какую-то статью, велика вероятность что пользователь с неправильными настройками языка получит 404.

Поэтому мы решили, что URL однозначно определяет язык. localeurl прекрасно в этом помогает, он отвечает как за смену языка из ссылки, так и за модификацию ссылок на странице (переопределяет {% url %}).

Вот и все


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

Очень надеюсь вскоре увидеть ваши проекты изнутри :)
Tags:
Hubs:
Total votes 95: ↑87 and ↓8 +79
Views 5.6K
Comments Comments 56