• Права для пользователья is staff?

    zymanch
    @zymanch
    python/django web-developer
    для добавления нужно только право "add..."
    право "change..." - дает возможность просмотра списка и редактирования данных (но не удаления)
    таким образом, если вы хотите, чтобы пользователь только создавай новых пользователей - выдайте ему только право "add...", списка пользователей он видеть не будет, изменить и удалить ничего не сможет
    хотите, чтобы пользователь еще и менять что-то мог - давайте "change..."
    в любом случае, без права "delete..." никто ничего удалить не сможет
    Ответ написан
  • Как грамотно реализовать работу с внешними данными?

    zymanch
    @zymanch
    python/django web-developer
    в Django работа с несколькими базами данных осуществляется так.
    При этом весь набор функционала Django (модели, менеджеры и пр.) доступен для всех баз вашего проекта.
    Ответ написан
    4 комментария
  • Какова правильная логика импорта модулей в таком случае?

    zymanch
    @zymanch
    python/django web-developer
    столкнулся с этой проблемой не так давно. Теперь файлы моделей у меня выглядят так:
    app2/models.py:
    from django.db import models
    
    class B(models.Model):
        data = models.ForeignKey('app1.A')

    избавляет от лишних импортов и, ИМХО, делает код модели более читаемым - всегда видишь к какому приложению относится модель.
    Если нужно в том же файле использовать класс A, например - в методе того же класса, то делаю так:
    from django.db import models
    from django.apps import apps
    
    class B(models.Model):
        data = models.ForeignKey('app1.A')
    
        def some_method(self):
            a_class = apps.get_model('app1', 'A')
            a_object = a_class.objects.get(id=1)
            ...
    Ответ написан
    Комментировать
  • Как в шаблоне отобразить error messages?

    zymanch
    @zymanch
    python/django web-developer
    Валидация на сервере принципиальна?
    Зачем гонять данные на сервер и обратно, если вот так можно все быстро и дешево сделать на фронтенде.
    Ответ написан
  • Как в стандартной User сделать аналогичный список как выбор "Группы"?

    zymanch
    @zymanch
    python/django web-developer
    для начала, я бы не переопределял модель пользователя, а просто расширил бы вот так
    получится что-то типа:
    models.py
    from django.contrib.auth.models import User
    
    class Customer(models.Model):
        user = models.OneToOneField(User)
        shops = models.ManyToManyField(Shops)

    ну, и чтоб уж совсем как для групп:
    admin.py
    class CustomerInline(admin.StackedInline):
        model = Customer
        fk_name = 'user'
        can_delete = False
        filter_horizontal = ('shops', )
    
    class CustomerAdmin(UserAdmin):
        inlines = (CustomerInline, )
    
    admin.site.unregister(User)
    admin.site.register(User, CustomerAdmin)
    Ответ написан
  • Как лучше организовать сервер для 1с?

    zymanch
    @zymanch
    python/django web-developer
    сервер/не сервер: может предрассудок, но серверному ПО - сервер; другое качество железа, большая производительность, возможности к расширению
    по поводу конфигурации сервера - согласен с handbrake, расписано дельно
    по поводу базы данных: 6-8 человек - пограничное количество, когда уже рекомендуется использование MSSQL, но еще можно работать на файловой базе. Если нет спецов по MSSQL, начните с файловой, почувствуете проблемы с производительностью базы - переходите на MSSQL. Кстати, если работать с MSSQL, рекомендую разносить файлы баз данных и логи транзакций на разные дисковые массивы - производительность возрастает ощутимо. Еще, для MSSQL, настоятельно рекомендую ознакомиться и реализовать.
    бэкапы: для файловой используйте встроенные средства 1С - там есть весь нужный функционал (но потребуется, чтобы все пользователи вышли из системы); для MSSQL базы - встроенные средства СУБД, они быстрее 1С-ных и не требуют выгонять пользователей. Бэкапы всегда лучше хранить на отдельном устройстве с RAID массивом (подойдет сетевое хранилище от WD на пару дисков с поддержкой RAID1). Не надо отдавать хранение бэкапов на откуп пользователю
    Ответ написан
    Комментировать
  • Как ограничить ввод кирилицы в Django?

    zymanch
    @zymanch
    python/django web-developer
    Не стал бы в этом случае делать валидацию на сервере - после POST в случае ошибки пользователю придется заново вводить все данные формы (или вы от этого подстраховались?).
    Я бы сделал все на фронтенде, например, вот этой библиотекой с любым необходимым вам регулярным выражением (примеры см. выше).
    Ответ написан
    Комментировать
  • Как у Вас устроено командное хранение паролей?

    zymanch
    @zymanch
    python/django web-developer
    у нас используется teampass, но мы все чаще думаем о самописке
    Ответ написан
    2 комментария
  • Как установить Django 1.8, Python 3 и настроить Apache на VPS(Centos 6)?

    zymanch
    @zymanch
    python/django web-developer
    чтобы не сломать существующий проект на python 2.6 воспользуйся pyenv - он позволит поставить нужный тебе python (не стоит же использовать 2.6), не затронув существующий.
    а для развертывания проекта я бы для начала порекомендовал вот эту статью. Она на английском, но читается хорошо. Там описана и подготовка правильных пользователей, и настройка связки gunicorn+supervisord+nginx. Как повесить nginx на порт отличный от 80 можно легко найти в интернете.
    PS: согласен с предыдущим оратором, apache для Django использовать не стоит (ИМХО)
    Ответ написан
    Комментировать
  • Какие в настоящие время актуальные способы запуска django-скриптов через cron?

    zymanch
    @zymanch
    python/django web-developer
    Почему бы не попробовать Celery? Асинхронный запуск задач, управление расписанием через админку проекта; полноценная работа с ORM проекта в коде task'а.
    Ответ написан
    Комментировать
  • Как грамотно организовать проект на Django (приложения, шаблоны, статические файлы)?

    zymanch
    @zymanch
    python/django web-developer
    Обычно разделяю предметные области проекта на отдельные приложения. Если какая-то область слишком обширна, то в папке приложения создаю отдельные приложения для подобластей. Для каждого приложения - своя папка templates: это позволяет при большом количестве приложений не путаться в разросшейся иерархии директорий. Кроме того, отправляю всю обособленную статику в директории static каждого приложения: иногда для работы интерфейса пишу JavaScript приложения на Marionette - всегда знаю, где искать нужную кучу скриптов.
    Для примера: пишем проект для дилерской сети по распространению и продаже автомобилей. Получается так:
    ./project_name/
    ./project_name/settings.py
    ./project_name/urls.py
    ./project_name/static/
    ./project_name/static/css/...
    ./project_name/static/js/...
    ./project_name/static/imgs/...
    ./dealer/
    ./dealer/admin.py
    ./dealer/models.py
    ./dealer/views.py
    ./dealer/urls.py
    ./dealer/templates/
    ./dealer/templates/dealer/
    ./dealer/templates/dealer/list.html
    ./vehicles/
    ./vehicles/admin.py
    ./vehicles/models.py
    ./vehicles/logistics/
    ./vehicles/logistics/models.py
    ./vehicles/logistics/admin.py
    ./vehicles/logistics/views.py
    ./vehicles/logistics/urls.py
    ./vehicles/logistics/templates/
    ./vehicles/logistics/templates/logistics/tracking.html
    ./vehicles/logistics/static/
    ./vehicles/logistics/static/js/app/tracking/
    ./vehicles/logistics/static/js/app/tracking/main.js
    ./vehicles/logistics/static/js/app/tracking/app.js
    ./vehicles/logistics/static/js/app/tracking/...
    ./vehicles/sales/
    ./vehicles/sales/models.py
    ./vehicles/sales/admin.py
    ./vehicles/sales/views.py
    ./vehicles/sales/urls.py
    ./vehicles/sales/templates/
    ./vehicles/sales/templates/sales/invoices.html
    ./vehicles/sales/static/
    ./vehicles/sales/static/js/app/invoices/
    ./vehicles/sales/static/js/app/invoices/main.js
    ./vehicles/sales/static/js/app/invoices/app.js
    ./vehicles/sales/static/js/app/invoices/...
    ./static/
    ./media/
    ./templates/
    ./templates/base.html
    ./templates/...

    Далее по аналогии. Если нужна какая-то мелочь - отправляем ее в соответствующее "корневое" приложение; если мелочь становится более серьезным куском функционала в рамках той же предметной области - создаем ей отдельное приложение внутри уже существующего. Все, что выходит за рамки предметной области - новое "корневое" приложение.
    Ответ написан
    Комментировать