1
votes

Rediriger le chargement de l'ancien contenu?

un problème un peu étrange. Pour simplifier le problème à des fins d'explication. Un utilisateur accède à la page / Total et obtient le nombre d'enregistrements dans le magasin de données avec «steve» comme nom, au moment où il y en a 2, il peut alors appuyer sur incrément et l'utilisateur est redirigé vers / Increment afin qu'un autre enregistrement soit ajouté dans le nbd, l'utilisateur est à nouveau redirigé vers / Total mais il affiche toujours 2! S'il actualise simplement la page, il affiche alors 3. Je suppose que c'est parce que la redirection vers / Total se produit avant que l'entité ne soit pleinement engagée dans le magasin de données? Sinon, voici le code, merci de me faire savoir ce qui ne va pas. Merci!

    PYTHON:
    @app.route("/Total", methods=['GET', 'POST'])
    def total():
     data = Logins.query(Logins.name == "steve").count()
    return render_template('Total.html', count=count)

    @app.route("/Increment", methods=['GET', 'POST'])
    def incre():
     new_data = oAuthLogins()
     new_data.name = "steve"
     new_data.put()
    return redirect(url_for('total'))

    Total.html:
    {{count}}
    <a href={{url_for('incre')}}> Increment! </a>


1 commentaires

Il serait utile d'ajouter la banque de données que vous utilisez et si elle est exécutée dans un type de cluster.


3 Réponses :


0
votes

Cela peut se produire pour plusieurs raisons: mise à jour lente de la base de données (éventuellement cohérente), mise en cache, etc.

Mais est-ce une bonne expérience utilisateur?

Si un utilisateur voit un nombre (2) puis appuie sur incrément, mais que l'enregistrement a changé, vaut-il mieux montrer à l'utilisateur le nombre qu'il attend (3), ou le nombre réel (qui peut être bien supérieur à 3 de l'heure à laquelle ils cliquent par incrément)?

Pour UX, je pense que l'utilisateur devrait voir le numéro 3. Il / elle peut toujours voir le dernier numéro avec une autre actualisation.

Dans cet esprit, vous résolvez ce problème en modifiant l'appel / increment à faire via AJAX et en incrémentant simplement le numéro sur le front-end lorsque vous obtenez une réponse 200.


0 commentaires

0
votes

Vous obtenez le décompte à partir d'une requête ( Logins kind) qui est toujours finalement cohérente sauf s'il s'agit d'une requête ancêtre.

Vous pouvez afficher le compte correct si vous transformez la méthode pour l'obtenir en une méthode fortement cohérente, par exemple en la stockant dans une propriété de l'entité utilisateur que vous pouvez toujours obtenir par recherche de clé (ou tout autre type d'entité équivalent toujours dans une relation 1 à 1 avec l'entité utilisateur, voir réutiliser l'ID d'une entité pour d'autres entités de différents types - idée sensée? )


0 commentaires

0
votes

J'ai essayé de reproduire le problème et cela a fonctionné pour moi. Je ne sais pas si c'est ce que vous recherchez, mais voici mon exemple de code dans GitHub .

Lors de l'exécution du code, procédez comme suit:

  1. En accédant à localhost: 8080 imprimera Hello World
  2. Accédez à localhost: 8080 / add pour la première fois pour entrer la première valeur dans entity. (Ajoutera le numéro 2)
  3. Accédez aux entités de la page GCP et récupérez l'identifiant de l'enregistrement
  4. Remplacez cet identifiant par celui du code ENTITY_KEY
  5. Accédez à localhost: 8080 / get imprimera le numéro enregistré dans l'entité
  6. Accédez à localhost: 8080 / update obtiendra ce numéro, ajoutez 1 à ce numéro et enregistrera à nouveau le numéro.
  7. Après cela, il sera automatiquement redirigé vers localhost: 8080 / get et vous montrera la valeur mise à jour dans l'entité

0 commentaires