Ответы пользователя по тегу Django
  • Как сделать атомарной часть кода в django?

    Bahusss
    @Bahusss
    Python Master
    Вопрос одновременного доступа к данным чаще всего не имеет общего решения, которой подойдет для любого случая и нужно каждый конкретный случай рассматривать отдельно.

    Для приведенного случая атомарной записи в базу пример вам уже привели. Для другого случая - будет какое-то другое решение. Если речь идет именно о совместном доступе к данным в реляционной базе, то можете попробовать поставить другой уровень изоляции транзакций, например при уровне Serializable и использовании транзакций - они все будут выполнятся последовательно и соответственно проблем с одновременным доступом не будет, но появятся новые.
    Ответ написан
    Комментировать
  • Можно ли, стоит ли и если "да", то как... в модели помимо поля указывать сразу возможные значения этого поля и записывать их в БД при миграции?

    Bahusss
    @Bahusss
    Python Master
    Итак, как вы уже выяснили choices не записываются в базу - они хранятся исключительно в коде и используются ORM для валидации данных и формировании списка вариантов в формах, например в Django-админке.

    При поставленной задаче на ум приходит следующее:

    Использовать choices и хранить список стран в настройках проекта - Django settings, таким образом будет проще пользоваться возможностями Django ORM для валидации данных и представления данных в формах. Стоит учесть, что при добавлении новой страны придется изменять настройки и перезапускать (перевыкатывать) проект.

    Затем, написать датамиграцию, чтобы добавить необходимые вам страны в базу. В такой миграции вы сможете в цикле пройтись по названиям стран из настроек проекта и создать все необходимые объекты, если они еще не созданы.
    Ответ написан
  • AJAX, Django, CSRF: Почему выходит ошибка 403?

    Bahusss
    @Bahusss
    Python Master
    На самом деле csrf.js не генерирует csrf token, а только читает его из cookies и помещает в HTTP заголовок, чтобы Django (CsrfViewMiddleware) смог прочитать его и защитить от CSRF-атаки, если токен невалиден.

    Таким образом, чтобы добавить в cookies этот самый csrf token необходимо чтобы:
    1. В MIDDLEWARE_CLASSES обязательно должна быть указана CsrfViewMiddleware
    2. В шаблоне вам нужно вставить в какую-нибудь форму тег {% csrf_token %}, если у вас нет никакой подходящей формы, то воспользуйтесь декоратором ensure_csrf_cookie (https://docs.djangoproject.com/en/1.8/ref/csrf/#dj..., которым нужно декорировать view c index.html.
    Ответ написан
    2 комментария
  • Как исправить ошибку с Uwsgi?

    Bahusss
    @Bahusss
    Python Master
    При такой конфигурации nginx ваш test.ini должен выглядеть так:
    [uwsgi]
        socket = /home/adminko/projects/test/uwsgi.sock
        plugins = python
        virtualenv = /home/adminko/virtualenv/test/
        chdir = /home/adminko/projects/test/
        env = DJANGO_SETTINGS_MODULE=test.settings
        module = django.core.wsgi:get_wsgi_application()

    Насчет nginx'a вы думаете неправильно - за вас uwsgi он не запустит и будет отдавать вам 502 код. Если вам мешает постоянно открытая консоль с запущенных uwsgi - запустите его как демон с помощью параметра daemonize, добавьте в конфиг:

    daemonize = [путь к лог файлу uwsgi]
    Ответ написан
    Комментировать
  • Почему не получается запустить django testserver с fixtures?

    Bahusss
    @Bahusss
    Python Master
    При запуске тестов база не создается абсолютно пустой, т.к. Django выполняет несколько дополнительных шагов после выполнения syncdb или migrate (в новых версиях), например она вызывает метод update_contenttypes, который и заполняет табличку ContentTypes.

    Вариантов решения проблемы несколько, но предлагаю дампить данные такой строчкой:
    ./manage.py dumpdata --natural -e contenttypes -e auth.Permission > dump.json

    Таким образом вы исключите из фикстуры данные, которые и так создаются автоматически при каждом запуске тестов.

    Для дальнейшего чтения рекомендую stackoverflow.com/questions/853796/problems-with-c...
    Ответ написан
    Комментировать
  • Почему сайт не отображается когда я использую сокеты вместо портов в uwsgi?

    Bahusss
    @Bahusss
    Python Master
    Судя по конфигурации nginx - он слушает стандартный 80 порт, но заходите вы почему-то на mysite.ru:8000.
    Ответ написан
  • Reverse() функция или тэг шаблонов url?

    Bahusss
    @Bahusss
    Python Master
    А у вас во вью weblog.views.posts параметры year, month, page — указаны как аргументы?
    Ответ написан
    1 комментарий