LINUX.ORG.RU

Состоялся релиз системы управления контентом MLUG

 , , ,


0

3

Буквально только что состоялся релиз первой рабочей версии системы управления контентом MLUG.

Система распространяется на условиях GNU AGPL третьей версии.
Для добавления своего кода в основной репозиторий нужно дать согласие на перелицензирование по усмотрению хозяина репозитория.

Система управления контентом может похвастаться такими особенностями:

  • Основана на свежей Django с долговременной поддержкой и минимумом зависимостей, которые можно без больших проблем исключить из сборки вообще.
  • Не делает лишнего, только самое необходимое для сайта.
  • Красивая нескучная тема оформления (в данной версии простая смена шаблонов не предусмотрена, но стили менять довольно просто).
  • Приложение для рассылки почты подписчикам с подтверждением, отпиской, настройками, списками рассылок и отложенной отправкой.
  • Приложение голосований с инновационной системой жетонов и встроенным генератором QR-кодов для доступа к приватным голосованиям.
  • Переполнена добротой и любовью.
  • В комплекте красивая иконка под лицензией CC-BY-SA 4.0.
  • Полностью переведена на русский и английский языки и готова к переводу на любые другие (но не полностью готова поддержка многоязычного контента для сайта).
  • Рассчитана исключительно на защищённое соединение (это не обусловлено техническими причинами, но во множестве мест в исходном коде жестко прописан https).
  • В качестве отступов в коде не используются пробелы.
  • Написана и поддерживается лично мной в свободное время, коммерческая поддержка для серьёзных организаций возможна.

Репозиторий со всеми исходниками, документацией, багтрекером и даже картинками

>>> Демо

★★★★★

Проверено: splinter ()
Последнее исправление: splinter (всего исправлений: 5)

Ответ на: комментарий от th3m3

А я ещё ни разу не встречал идиота и чтобы не с виндой.
Все идиоты поголовно пользуются виндой, т.к. изначально читали правильные книги.

Goury ★★★★★
() автор топика
Ответ на: комментарий от cherry-pick

Либо ты до конца выходных напишешь такой камент к любой статье на МЛУГе, либо ты — самое толстое трепло ЛОРа за всю его историю.

Goury ★★★★★
() автор топика
Ответ на: комментарий от th3m3

Ладно бы ещё это было php, где ничего нет подобного.

4.2

Там есть PSR-1, PSR-2, которых придерживаются большинство новых проектов. Инструменты, позволяющие автоматически отформатировать код так, чтобы он соответствовал этим рекомендациям тоже имеются.

Kilte ★★★★★
()
Ответ на: комментарий от vvn_black

Угу, это баг в рассчётах, буду исправлять.
И про высоту таба тоже надо что-нибудь придумать.

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

Конечно, можно развернуть у себя клон репозитория, создать суперпользователя и посмотреть.
В будущем возможно сделаю демо админки, но пока она к этому не готова.

Goury ★★★★★
() автор топика
Ответ на: комментарий от cherry-pick

Да, я уже заметил, исправлю

Goury ★★★★★
() автор топика
Ответ на: комментарий от cherry-pick
$ while $(true); do curl -v -e "https://mlug.ru/cms/demo" --cookie "csrftoken=$CSRFTOKEN" -d "csrfmiddlewaretoken=$CSRFTOKEN&uuid=$UUID&back_url=%2Fcms%2Fresults&option=3" https://mlug.ru/polls/; done

Значение $CSRFTOKEN и $UUID берёте из кода странички.

cherry-pick
()
Ответ на: комментарий от cherry-pick

csrfmiddlewaretoken=$CSRFTOKEN

Мне кажется, что CSRFTOKEN может быть любым, не обязательно тем, что на той странице.

x3al ★★★★★
()
Ответ на: комментарий от cherry-pick

После 2147483647 сбросится в -2147483648 и будет ходить кругами пока не надоест. https://bitbucket.org/mlug/mlug.ru-django/src/e8d1e46f8944c9101df7646c2826c04...

Goury ★★★★★
() автор топика
Последнее исправление: Goury (всего исправлений: 1)
Ответ на: комментарий от cherry-pick

Хранит в IntegerField, вроде бы джанга должна выкинуть исключение при попытке переполнить (?), он исключения не ловит и будет 500 на POST-запрос и счётчик остановится на максимальном значении. Наверно.

Там и помимо переполнения дофига проблем. https://bitbucket.org/mlug/mlug.ru-django/src/e8d1e46f8944c9101df7646c2826c04...

option.votes_counter += 1
option.save()

Привет гонкам.

x3al ★★★★★
()
Ответ на: комментарий от Kilte

Ну, вот, дожили. Даже у php'шников появились стандарты и они их придерживаются. А Питонисты всю жизнь имеют pep8 и не придерживаются его.

th3m3 ★★★★★
()
Ответ на: комментарий от cherry-pick

Просто вместо того, чтобы запихнуть option (и заодно ID опроса) в URL и валидировать роутером, ТС решил передавать их в POST и валидировать только ID опроса. А 500 из-за того, что питон пытается скастовать в int и не может.

x3al ★★★★★
()
Ответ на: комментарий от Goury

cms/utils.py:get_next_2nd_friday_or_last_saturday Можешь начинать переписывать.

anonymous
()
Ответ на: комментарий от th3m3

Многие питонисты считают, что 79-символов-на-строку — драконовское ограничение и вписывают строки в 119 символов. Это впритык совместимо с гитхабом, да и в гуглестиле примерно то же.

x3al ★★★★★
()
Ответ на: комментарий от th3m3

Это всё потому что у них до сих пор не было инструментов, которые могли бы отформатировать код автоматически. Сейчас вот погуглил, нашёл пару штук, которые появились совсем недавно, да и те inspired by gofmt. Так-то.

Kilte ★★★★★
()
Ответ на: комментарий от x3al

Есть же mako, jinja2, chameleon или что там в django сейчас используется. Нет, хотим жрать говно гипертекстовую лапшу.

Kilte ★★★★★
()

но во множестве мест в исходном коде жестко прописан https

Но почему? В django же есть {% url 'view' %} и reverse('view', args=(arg,)) и т.п.

pawnhearts ★★★★★
()

Алсо

Это демонстрационная страница, просто чтобы было проще посомтреть как оно выглядит и работает.
посомтреть

cherry-pick
()

Вообще, после этого треда довольно забавно смотрятся твои постоянные попердывания о ценниках в Job.

Deleted
()
Ответ на: комментарий от Deleted

Из базы берётся значение счётчика для опции, инкрементируется и сохраняется. Когда процессов/потоков больше одного — получаем, например,

1. Процесс1 взял значение счётчика 300
2. Процесс2 взял значение счётчика 300
3. Процесс1 инкрементировал и получил 301
4. Процесс2 инкрементировал и получил 301
5. Процесс2 сохранил 301 в базу
6. Процесс1 сохранил 301 в базу

Потерян 1 голос.

x3al ★★★★★
()
Ответ на: комментарий от x3al

Чтобы такого не было, в джанге есть F-expressions, но это ж нужно осиливать документацию.

x3al ★★★★★
()
Ответ на: комментарий от x3al

В случае нормальной бд (постгрес) и нормального уровня изоляции транзакций будет ошибка сериализации и повтор попытки.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Джанга не умеет раскрывать += в атомарный update (неудивительно: мало ли что ты там делаешь с полем). stackoverflow говорит точно то же самое.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Ответ на: комментарий от x3al

Я просто написал перед комментом про F-expressions. Ну постгрес все равно должен защитить от подобного, другое дело, что по дефолту там кажись не SERIALIZABLE, и повтор нужно руками писать.

Deleted
()

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

cherry-pick
()
Ответ на: комментарий от Goury

Вы только посмотрите на этого мамкиного борцуна со стандартами.

Deleted
()
Ответ на: комментарий от x3al

он исключения не ловит и будет 500

Вот и посмотрим что будет, 0.0005% до переполнения уже успели пройти
И посмотрим что будет раньше — я протестирую, напишу юниттесты и закрою возможные дырки или какой-то толстый с лора переполнит буфер и завалит меня репортами о пятисотой ошибке.

Goury ★★★★★
() автор топика
Ответ на: комментарий от cherry-pick

Оно пытается сделать ему int(), но не получается. Я лоханулся и не обработал этот вариант, должно быть 400, исправлю.

Goury ★★★★★
() автор топика
Ответ на: комментарий от x3al

именно так, будем валидировать в следующей версии

Goury ★★★★★
() автор топика
Ответ на: комментарий от pawnhearts

Потому что.
Для функционирования не критично и даже не важно, в будущем переделаю как надо.

Goury ★★★★★
() автор топика
Ответ на: комментарий от x3al

Нельзя не указывать протокол для внешней ссылки.
Внутренние ссылки вообще локальные все.

Goury ★★★★★
() автор топика
Ответ на: комментарий от x3al

Ну тогда и исправлять нечего

Goury ★★★★★
() автор топика
Ответ на: комментарий от Goury

Можно писать <a href=«//example.com»>вот так</a>. ЛОР-парсер так не может, но браузеры поймут и по щелчку будет переход по тому же протоколу, что и на странице, где эта ссылка расположена.

x3al ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.