Пометка пользователей как новых при создании с помощью аутентификации бэкэнда в Django - PullRequest
3 голосов
/ 12 мая 2011

У меня есть сервер аутентификации, основанный на устаревшей базе данных. Когда кто-то входит в систему, используя эту базу данных, а соответствующая запись User отсутствует, я создаю ее. Мне интересно, есть ли какой-нибудь способ предупредить систему Django об этом факте, чтобы, например, я мог перенаправить нового пользователя на другую страницу.

Единственное, о чем я могу думать, это добавить флаг в запись профиля пользователя, которая называется что-то вроде is_new, которая проверяется один раз, а затем устанавливается на False, как только они перенаправляются.

По сути, мне интересно, понял ли кто-то другой, чтобы мне не пришлось изобретать велосипед.

Ответы [ 3 ]

1 голос
/ 12 мая 2011

Я нашел, что самый простой способ сделать это - сделать именно то, что вы сказали. У меня было похожее требование по одному из моих проектов. Нам нужно было показать сообщение «Не забудьте обновить свой профиль» любому новому участнику, пока он не посетит свой профиль в первый раз. Клиент захотел это быстро, поэтому мы добавили поле 'visit_profile' в профиль пользователя и установили по умолчанию значение False.

Мы остановились на этом, потому что он был очень быстрым в реализации, не требовал вмешательства в процесс регистрации, работал с существующими пользователями и не требовал дополнительных запросов при каждой загрузке страницы (так как пользователь и профиль пользователя извлекаются на каждая страница уже). У нас заняло 10 минут, чтобы добавить поле, запустить миграцию на юг и вставить в шаблон тег if.

1 голос
/ 12 мая 2011

Есть два метода, которые я знаю, чтобы определить, был ли создан объект:

1) При использовании get_or_create возвращается кортеж в форме (obj, created), где created - логическое значение, явно указывающее, был ли объект создан или нет

2) Сигнал post_save передает параметр created, также логический, также указывающий, был ли объект создан или нет.

На простейшем уровне вы можете использовать любой из этих двух хуков, чтобы установить сеансовую переменную, которую вы затем можете проверить и перенаправить соответствующим образом.

Если вы можете обойтись этим, вы также можете напрямую перенаправить либо после вызова get_or_create, либо с помощью сигнала post_save.

0 голосов
/ 12 мая 2011

Вы можете использовать файловый кеш для хранения пользователей, которые еще не сохранены в базе данных.Когда пользователь регистрируется во второй раз, вы можете заглянуть в кеш, найти объект пользователя и окончательно сохранить его в базе данных.

Вот некоторая информация о кэшировании django: http://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...