2013-07-11 2 views
0

Я создаю приложение django, где пользователи отвечают на различные вопросы в опросе, но если они не вошли в систему, их голоса будут удалены через три дня.Предоставление профиля для анонимного пользователя

Как я это сделать на данный момент выглядит следующим образом:

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

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

Есть ли лучший способ?

+0

Я думаю, что некоторые из сторонние библиотеки auth для Django имеют поддержку притворения-входа. – millimoose

+0

Спасибо, @millimoose! Это очень полезная идея. –

+0

Эй, @millimoose! Вы хотите преобразовать свой комментарий в ответ? Я бы согласился. –

ответ

1

Простое решение не связывает ответы опроса с идентификатором пользователя. Дайте ответному опросу отдельный, полностью независимый идентификатор. Когда настоящий пользователь зарегистрирован, создайте одностороннюю ассоциацию от пользователя для ответа на опрос. Когда анонимный пользователь регистрируется, добавьте эту связь. (То есть «владелец» опроса будет необязательным.) Затем периодически удаляйте старые ответы опроса, у которых нет владельца, и/или игнорируйте устаревшие ответы в запросах.

Эта смена большей части сложности из приложения администратора только для регистрации пользователя. (Т.е. когда анонимный пользователь отвечает на опрос, сохраните идентификатор ответа в сеансе. Когда новый пользователь регистрируется, проверьте сеанс для идентификаторов ответа и , затем назначьте его идентификатору пользователя.)

Смежные вопросы