• Хочу работать программистом Python бесплатно. Это возможно?

    Это не будет бесплатно. Платой будет указание на ваши ошибки. Можете мне написать на почту или в skype, они в профиле, побеседуем.
    Ответ написан
    1 комментарий
  • В чем разница групп с правами и булевыми полями юзера?

    Стандартные разрешения в django привязаны к CRUD-операциям, и даже без R: create, update и delete. Таким образом, эти операции определяют доступ к конкретным категориям объектов.

    Флаги is_active, is_staff и is_superuser имеют более общий смысл: они определяют статус пользователя, его положение в системе. Если not is_active, никакие выданные пользователю permissions не применяются. Если is_superuser, то они не имеют никакого значения - у пользователя есть все permissions, которые в системе есть, и даже те, которых нет (has_perm() возвращает всегда True).

    Наконец, is_staff определяет доступ к админке и, таким образом, указывает, можешь ли ты в рамках админки использовать те permissions, что тебе назначены.

    Таким образом, перечисленные флаги являются не аналогом permissions, а ортогональны им, регулируя применение уже имеющихся permissions.
    Ответ написан
    Комментировать
  • Альтернатива Sentry для Django?

    Просто разворачиваете Sentry у себя на сервере и работаете с нею.
    Ответ написан
    Комментировать
  • Где лучше хранить файлы, предназначенные для скачивания другими пользователями?

    Вы можете подписаться на Amazon Free Tier и получить там бесплатное хранение файлов в облаке S3 в течение, кажется, года. Файлы будут скачиваться по прямой ссылке.
    Ответ написан
    Комментировать
  • Есть ли стандартная нотация для схемы потока данных и действий пользователя?

    1) Посмотрите на BPMN. Это далеко не идеальная нотация, однако она примерно для таких задач и используется.
    2) Да.
    Ответ написан
    Комментировать
  • С помощью чего можно создать свою интерактивную карту?

    Использовали leaflet.js для подобных задач. Описанный функционал там уже есть, API очень прост и понятен, хорошо документирован. Зачем придумывать велосипеды, когда грамотные люди уже сделали решение? Единственное, что вам понадобится сделать:

    - Написать функцию или REST API, которое возвращает данные для pop-up
    - Написать функцию, которая выдаёт HTML для этого pop-up.
    Ответ написан
  • Суперкласс Object можно привязать к БД или нет?

    1. Что вы понимаете под "привязать к БД"? Какой ORM используется?
    2. Что значит "подкласс суперкласса"? Масло масляное.
    3. Почему вы называете БД типом данных?
    4. Как вы понимаете привязку класса к типу данных?


    Объясните, пожалуйста, суть вопроса человеческим языком, а не посредством неправильно употребляемых терминов.
    Ответ написан
    7 комментариев
  • В чём разница между операндом и литералом?

    # "Hello world" - литерал
    print("Hello world")
    
    # somevariable - не литерал
    print(somevariable)
    
    # сложение - бинарная операция
    # x и 3 - операнды
    # а 3, кроме того, и литерал
    x + 3
    Ответ написан
    1 комментарий
  • Как выбрать CMS для персональной базы знаний(набора страниц со структурой)?

    Попробуйте notion.so - я нашёл её недавно и просто нарадоваться не могу. Есть дерево страниц, поиск, ссылки между страницами, семантическое форматирование, вставка фото, видео, карт, даже TeX. Нет таблиц и тегов, но обещают, что в ближайших планах.
    Ответ написан
    Комментировать
  • Где лучше всего создать интерактивный учебник?

    Можно взять MkDocs или подобный генератор статических сайтов. Собственно, генерация документации - это их главное назначение.

    Если вы хотите сделать вывод определения термина по наведению мыши, вспомните, что на сенсорных устройствах это будет неудобно. Кроме того, длинный текст будет неудобно выглядеть и нельзя его будет копировать. Лучше для каждого термина отдельную страницу, на которую проставлять ссылки.

    Ещё одна вещь, которая понравилась мне с первого взгляда и навсегда, теперь пользуюсь постоянно, - notion.so. Там можно сделать вики и открыть её для доступа без регистрации, вот вам и учебник.
    Ответ написан
    Комментировать
  • Как понять CBV и GV?

    Разница появляется тогда, когда количество view становится сколь-нибудь значительным. В своих проектах мы используем почти исключительно CBV и стараемся уйти от функций-view как можно дальше. Посмотрите на библиотеку: https://github.com/brack3t/django-braces

    Предположим, что у вас 30 разных view, и из них 10 должны быть доступны только суперпользователю, 15 - только зарегистрированным пользователям с разными permissions, а 5 - анонимусам и ботам. Чтобы это сделать на FBV, надо будет в каждой функции писать проверку заново или делать какие-то специальные функции типа check_superuser(), которые в случае неуспеха выбрасывают 403. Но согласитесь, что это некрасиво. То ли дело с CBV:

    class ReactorCreateView(PermissionRequiredMixin, CreateView):
        permission = 'myapp.create_reactor'
        model = AtomicReactor


    и собственно всё. Вы можете легко поменять одно на другое.

    Если у вас этих view вообще сотни по системе, то может оказаться, что в доброй половине используются одни и те же шаблоны, уровни доступа, дефолтные фильтры на queryset, и поэтому вы можете создавать свои собственные mixin и использовать их во многих view сразу.

    Так что CBV - это дико полезная вещь; советую вам сразу только ими и пользоваться, чтоб потом не было мучительно больно переписывать разросшуюся груду процедурной лапши.
    Ответ написан
    5 комментариев
  • Пути создания виртуального тренажера?

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

    Я бы сказал, что существуют следующие методы решения задачи.

    Настольное приложение на Python. Python для сколь-нибудь сложных систем более удобный язык, чем JavaScript, потому что вы можете легко разложить вашу симуляцию на классы, описать взаимоотношения между ними. Есть много структур данных: списки, очереди, словари, что угодно, - не надо делать свой класс prioritized queue, например. Есть всяческие оптимизированные инструменты вроде numpy, scipy.

    Есть фреймворки для разработки приложений: pygame и более новый kivy. О kivy я ничего сказать не могу. О pygame могу сказать, что её API мог бы хорошо смотреться двадцать лет назад, но не сегодня. Python гибкий язык, на нём можно писать гораздо более человекопонятные библиотеки.

    Кроме того, на pygame без дополнительных библиотек вам придётся руками, из прямоугольников и окружностей, рисовать графики, схемы, etc, - то есть вы много времени потратите на вспомогательные вещи вместо того чтоб разрабатывать вашу симуляцию. Возможно, библиотеки для этих вещей существуют, но я мало знаком с разработкой настольных приложений на Python, не могу сказать.

    Наконец, чтобы распространять ваше приложение, потребуется сделать установщик, собрать его в .exe специальным инструментом, обновлять его как-то. Всё это довольно муторно и вселяет тоску.

    Клиентское приложение на JS, как писали уважаемые участники обсуждения выше, лишено многих из этих недостатков. У пользователей будет доступ к вашей программе отовсюду, не нужно ничего устанавливать на компьютер. К вашим услугам Canvas, SVG и при необходимости WebGL. И море, нет, - океан разнообразных JS-библиотек, которые позволяют быстро и удобно делать графику, диаграммы, анимацию, визуализации любого сорта.

    Недостатки, с которыми встречался я, когда занимался чем-то подобным:

    • Отсутствие удобных структур данных. В JavaScript есть корявые списки, с которыми работать неудобно. Но я думаю, что сейчас этот недостаток нивелируется развитием самого языка и появлением библиотек типа underscore.js.
    • Неудобство и лапшевидность получающегося кода в результате отсутствия нормального наследования. Ну тут снова: библиотек для того же наследования существует множество; есть requirejs и модули; ну и вообще, сейчас я бы сделал это всё иначе :)
    • Медленность вычислений. Весьма относительная вещь, потому что программу можно при желании сильно оптимизировать; для большинства таких симуляций, о которых речь шла у меня, производительность проблемой не была.
    Гибридный вариант. Веб-приложение, на бэк-енде работает процесс, выполняющий расчёты; на фронт-енде работает клиентский код, который общается с пользователем и визуализирует результаты. Для больших симуляций - очевидно лучший вариант, но и самый сложный. И клиент и сервер имеют каждый свою объектную модель, и в некотором смысле одно и то же, получается, нужно дважды реализовывать.

    Поэтому, как итог - я бы предложил вам остановиться на варианте 2 (клиентский код на JS), а со временем, если симуляция окажется ну очень сложной - можно перейти к варианту 3, опираясь на накопленный опыт. Частично вынести из уже написанного приложения часть расчётов на сервер. Как пример: отдельный процесс по заданным параметрам с визуализацией вы считаете на клиенте, а если нужно посчитать сто процессов и найти какие-то усреднённые характеристики - это выносится на сервер. Просто и логично.

    Если интересно - пишите на почту, можно пообщаться. Я ни в коем случае не являюсь специалистом, но пока учился в вузе - немного интересовался темой, читал книги/статьи и писал простенькие программы по дискретно-событийному моделированию экономических процессов в качестве курсового проекта.
    Ответ написан
    1 комментарий
  • Как правильно вывести url?

    Похоже на то, что у вас переменные order.slug и start.id пусты или не определены. Они не подходят, потому что в url у вас [-\w]+ -знак плюс говорит, что хотя бы один символ должен присутствовать (что логично). А так синтаксис вроде бы правильный.
    Ответ написан
    5 комментариев
  • Почему в Python нельзя вывести значение глобальной переменной в функции перед ее затенением?

    Срабатывает, если перед print вписать:

    global a

    В моей практике ни разу не потребовалось делать подобное.
    Ответ написан
    Комментировать
  • В чём может быть проблема с БД? Доп.таблицы не создала?

    Я позволю себе подытожить несколько ответов и добавить от себя чуть.

    - release_date = models.DateField() - пропущены скобки, и также в некоторых аналогичных полях. Подозреваю также, что должно быть blank=True, null=True.
    - Явное задание первичных ключей не нужно. id_song, id_genre, ... - лишние. Django сама создаёт первичный ключ с именем id для каждой таблицы.
    - Мне кажется по смыслу, что у вас многие поля должны иметь blank=True, иначе - они все являются обязательными к заполнению.
    - Album как мне кажется должен быть отдельной таблицей, связываемой по foreign key.

    После исправления этого нужно сделать makemigrations и migrate, как указали выше.
    Ответ написан
  • Есть ли сервисы мониторинга и хранения логов?

    Ещё вариант: Sentry.

    Можно как использовать SaaS, так и поставить себе на сервер, есть клиенты для множества популярных языков и фреймворков.
    Ответ написан
  • Как отправить сообщение в джанго админку?

    from django.contrib import messages
    
    class MyAdmin(admin.ModelAdmin):
        def save_model(self, request, obj, form, change):
            if blablabla:
                messages.add_message('Category already exists.', level=messages.INFO)
            else:
                return super(MyAdmin, self).save_model(request, obj, form, change)


    Но мне что-то кажется, что ваш случай больше похож на валидацию формы, в том смысле чтоб подсветить поле, где пользователь ошибся, скажем имя категории, и не дать сохранить. Это уже другой вопрос, он решается, например, установкой атрибута unique=True полю имени категории.
    Ответ написан
    2 комментария
  • Сигнал, где ошибка?

    Сигнал post_save выполняется после сохранения объекта. Вы сохранили объект, а потом записали ему свойство instance.slug. Повторного сохранения не производится. И не должно производиться, на самом деле, - иначе у вас получится бесконечная рекурсия. Попробуйте сигнал pre_save, тогда после вашего обработчика объект будет сохранён и вуаля.

    P. S. Если модель Category - ваша, то можно напрямую переопределить def save(self, *args, **kwargs) в ней.
    P. P. S. Чтоб организовать иерархию, можно использовать django-mptt.
    Ответ написан
    2 комментария