Partage
  • Partager sur Facebook
  • Partager sur Twitter

Django comment maintenir une session ?

Sujet résolu
    19 juillet 2022 à 15:24:13

    Bonjour je développe un site e-commerce et je travaille sur la fonctionnalité du panier. Quand l'utilisateur n'est pas connecter je lui crée une session pour qu'il arrive a ajouter des produits dans le panier ce qui est normal, quand l'utilisateur décide de passer ça commande je lui demande de se connecter mais quand il se connecte il perd la session que je lui avais crée et une autres session lui est attribué. La cause est qu'une fois connecter il perd tout c'est produits sélectionne au paravent. Après avoir lu la documentation sur les sessions de django j'ai rien trouvé qui pouvais m'aider.

    voici mon code pour plus de détails:

    models.py

    class Cart(models.Model):
        session_id = models.CharField(max_length=150)
        product = models.ForeignKey(Products, on_delete=models.CASCADE)
        quantity = models.PositiveIntegerField(default=0, validators=[MinValueValidator(1)])
        
        updated = models.fields.DateTimeField(auto_now=True)
        created = models.fields.DateTimeField(auto_now_add=True)
        deleted = models.fields.BooleanField(default=False)
        
        def __str__(self) -> str:
            return str(self.product)


    views.py

    class FrontProductAddCart(View):
        
        def post(self, request, product_pk):
            
            session_id = request.session._get_or_create_session_key()
            product = models.Products.objects.get(pk=product_pk)
            
            objet, create = models.Cart.objects.get_or_create(session_id=session_id, product=product)
            quantity = request.POST.get("quantity")
            
            if quantity:
                objet.quantity = quantity
                objet.save()
            else:
                objet.quantity += 1
                objet.save()
            
            return HttpResponse(
                "",
                headers={
                    "HX-Trigger": json.dumps({
                        "product_add_cart": context_processors.get_total_number_products(request)
                    })
                }
            )






    -
    Edité par Franck_popo 19 juillet 2022 à 15:44:29

    • Partager sur Facebook
    • Partager sur Twitter
      19 juillet 2022 à 16:07:04

      Bonjour,

      Normalement c'est réglé par défaut à l'aide d'un middleware nommé 

      'django.contrib.sessions.middleware.SessionMiddleware'

      et est stocké en base de données afin de simplifier sa gestion.

      Le fait est, qu'une fois qu'on s'est logué, à moins de se dé-loguer, il n'y a pas besoin de se re-loguer avant un certains temps à moins de supprimer les cookies.

      Pour s'en assurer sur une requête, on peut vérifier la valeur de request.session.



      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        19 juillet 2022 à 18:10:13

        Cela ne semble pas fonctionner comme je veux, est-ce qu'il a un moyen de faire ce que je veux ?

        • Partager sur Facebook
        • Partager sur Twitter
          21 juillet 2022 à 22:41:14

          Peux tu m'expliquer la manière dont on se logue à ton site ?
          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

            23 juillet 2022 à 5:19:38

            Merci mais j'ai déjà trouver une solution
            • Partager sur Facebook
            • Partager sur Twitter

            Django comment maintenir une session ?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown