Как дать имена анонимным юзерам в Django?

Всем привет.

Задача: В чат должны иметь право писать, как авторизированные люди, так и анонимы.

Модель сообщения в чате выглядит примерно так (канал чата, автор поста, сам текст):

threed= models.CharField()
author = models.ForeignKey(User)
chattext = models.TextField()


С авторизированными пользователями все понятно, а вот что делать с теми, у кого её нет? Как их отличать в чате и давать автора для постов?

Генерировать для каждого анонима новый рандомный аккаунт и принудительно его авторизовывать?
  • Вопрос задан
  • 604 просмотра
Решения вопроса 2
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
AnonymousUser вроде сильно ограничен, думаю лучше генерить нового пользователя для каждого, либо создать одного гостя, ограниченного в правах и всех логинить под этим аккаунтом.
Ответ написан
Комментировать
ri_gilfanov
@ri_gilfanov
Web- and desktop-developer
Как вариант -- использование сессий: https://djbook.ru/rel1.9/topics/http/sessions.html

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

Пример кода, обрабатывающего POST-запросы для временной регистрации, а так же удаления никнейма для анонимного пользователя:
def chat_login(request):
    # Регистрируем псевдоним для чата на 30 дней
    if 'register' in request.POST:
        request.session.set_expiry(2592000)  # устанавливаем время жизни сессии
        request.session['username'] = request.POST['username']
    # Удаляем псевдоним для чата из своей сессии
    if 'unregister' in request.POST:
        request.session['username'].pop(request.POST['username'])


Преимущества сессий в данном случае:
- не нужно переопределять какие-либо модели,
- можно хранить любые данные,
- минимум кода.

Недостатки:
- сложнее проконтролировать уникальность имён пользователей,
- у сессии должно быть время жизни (хотя его и можно продливать в любой вьюхе, обновив значение любого ключа).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы