Django: configuration d'une session et d'obtenir la clé de session dans la même vue

Je veux stocker des choses dans une base de données, et j'utilise la session en cours en tant que clé étrangère:
à partir de 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))

De faire une nouvelle entrée pour ce modèle, je suis en utilisant ce qui suit pour obtenir la session en cours (en views.py):

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

Toutefois, si c'est la première fois qu'un utilisateur a visité le site, et n'ont donc pas un cookie encore, le code ci-dessus va produire un DoesNotExist erreur.

Je sais que même si il est maintenant cookie, vous pouvez toujours définir les objets de session. Donc, je peux penser à quelques hacks pour faire ce travail, tels que:

  • Définir l'identificateur unique comme un objet de session (en plus de la clé de session)
  • Stocker temporairement les données que je souhaite ajouter à la base de données d'un objet de session, et l'utilisation d'une fonction décorateur pour vérifier si elle existe avant de l'utiliser d'une session.
  • Suffit d'utiliser la session d'objets et de ne rien stocker dans la base de données (cela serait techniquement possible, mais pour mon application, cela dépend de Python dictionnaires avec quelques centaines d'entrées - être au moins aussi efficace qu'une base de données pour des choses comme le tri).

Mais je voudrais une meilleure solution, je peux vivre avec. Y sont généralement utilisés ou les bonnes solutions à ce problème? Ou suis-je à même de référencement sessions correctement dans mon modèle?

Merci pour votre aide.

InformationsquelleAutor Jon Cox | 2011-02-27