Я создал простое приложение django для аутентификации пользователей, а затем хочу развернуть его на nginx с помощью gunicorn. Я создаю свою пользовательскую модель с двумя полями: имя пользователя, пароль. Я тестировал, используя:
python manange.py runserver 0.0.0.0:8000
Работает нормально! Но когда я пытаюсь развернуть nginx с помощью Gunicorn, у меня возникает внутренняя ошибка сервера 500. Команда, которую я использовал для тестирования django с помощью Gunicorn, такова:
gunicorn --bind 127.0.0.1:8080 backend.wsgi:application
Бэкэнд - это мой startapp. Вот моя конфигурация nginx:
server {
listen 8000;
server_name localhost;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8080;
}
}
Когда я вхожу в систему с клиентского сайта, он отправляет на сервер почтовый запрос с учетными данными пользователя. На стороне сервера он успешно получает запрос с правильными учетными данными, но когда он пытается аутентифицировать пользователя, запрашивая таблицу User:
User.objects.get(username=username, password=password)
Возникает исключение:
(1054, "Unknown column 'auth_user.last_login' in 'field list'")
Эммм странно !!!! Откуда берется столбец last_login? Затем я проверил свой журнал и обнаружил что-то странное, когда я запускаю приложение django с Gunicorn и без Gunicorn.
При работе без nginx и gunicorn вот журнал запросов к таблице User:
2016-06-25 10:38:11,815|DEBUG|(0.001) SELECT `auth_user`.`id`, `auth_user`.`username`, `auth_user`.`password`, `auth_user`.`role` FROM `auth_user` LIMIT 21; args=()
При работе с nginx и gunicorn:
2016-06-25 10:33:57,983|DEBUG|(0.000) SELECT `auth_user`.`id`, `auth_user`.`password`, `auth_user`.`last_login`, `auth_user`.`is_superuser`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`date_joined` FROM `auth_user` LIMIT 21; args=()
Похоже, что при работе с nginx и gunicorn мои пользовательские модели не используются. Кто-нибудь знает об этой проблеме? Я сделал какую-нибудь ошибку при настройке nginx и gunicorn?
1 ответ
После целого дня отладки выясняется, что имя моего приложения аутентификации (а именно auth) конфликтует с auth по умолчанию django. Каким-то образом, когда я обслуживаю свое приложение через gunicorn, оно использовало приложение аутентификации по умолчанию django вместо моего. Если вы внимательно посмотрите журнал, он запрашивает пользовательскую модель django по умолчанию.
Чтобы решить эту проблему, я захожу в настройки своего приложения и удаляю django.contrib.auth.middleware! :)
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.