Django: установка сеанса и получение ключа сеанса в том же представлении

Я хочу сохранить некоторые вещи в базе данных и использую текущий сеанс в качестве внешнего ключа : from models.py

class Visited(models.Model):
    session = models.ForeignKey(Session)
    page = models.ForeignKey(Page)
    times_visited = models.PositiveIntegerField()
    ip_address = models.IPAddressField()
    date_last_visited = models.DateTimeField()
    def __unicode__(self):
        return u'(%s, %s)' % (str(self.session.session_key), str(self.page.name))

Чтобы создать новую запись для этой модели, я использую следующее для получения текущего сеанса (в views.py):

Session.objects.get(session_key=request.session.session_key)

Однако, если это первый раз, когда пользователь посещает сайт, и, таким образом, у вас еще нет файлов cookie, приведенный выше код вызовет ошибку DoesNotExist .


Я знаю, что даже если сейчас установлен файл cookie, вы все равно можете устанавливать объекты сеанса. Так что я могу придумать несколько приемов, чтобы сделать эту работу, например:

  • Установить уникальный идентификатор как объект сеанса (в дополнение к ключу сеанса)
  • Временно сохранить данные, которые я хочу добавить в базу данных сеанса объект и используйте функцию декоратора, чтобы проверить, существует ли он перед использованием сеанса.
  • Просто используйте объекты сеанса и не храните ничего в базе данных (это было бы технически возможно, но для моей реализации это будет зависеть от словарей Python с несколькими сотнями записей, которые будут по крайней мере столь же эффективны, как база данных для таких вещей, как сортировка.)


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

Спасибо за вашу помощь.

20
задан Jon Cox 27 February 2011 в 00:39
поделиться