0
votes

Code de page de connexion pour Python à l'aide de la fiole et du code PSQL ne fonctionne pas

J'essaie ce code pour la journalisation en compte qui a une base de données dans PSQL, mais pour une raison quelconque, je ne suis possible que de rendre la page d'erreur et aucune page de réussite

username= request.form.get("uname")
password = request.form.get("psw")


usernamedata= db.execute("SELECT username FROM register WHERE username=:username",{"username":username}).fetchone()
passworddata= db.execute("SELECT password FROM register WHERE username=:username",{"username":username}).fetchone()
if usernamedata is None:
    return render_template("error.html")
else:
    for pass_word in passworddata:
        if True:
            return redirect(url_for('lsuccess'))

        else:
            return render_template("error.html")


10 commentaires

recevez-vous un message d'erreur? Pourquoi êtes-vous en boucle via Passworddata BTW?


Non, je ne reçois aucun message d'erreur, ce code est exécuté, c'est juste que seul le fichier error.html est rendu et non le lsuccess.html. et je suis en boucle sur les données de mot de passe pour vérifier si le mot de passe est correct pour l'utilisateur spécifique.


Remarque Vous n'êtes pas Rendu une page, vous êtes Redirection de à une URL. Dans vos points de vue.Py Assurez-vous que la fonction qui gère cette URL rend en réalité une page.


Je suis désolé de ne pas rattraper ce que vous essayez de dire: /


Haha .. Désolé, mon mauvais, j'avais django à l'esprit .. Vérifiez la route de LSUCCESS et assurez-vous de Render Un modèle


ceci est dans ma page login.html


Vous devez avoir une fonction appelée lsuccess, et la fonction doit rendre un gabarit


@ app.route ('loginpage') def lsuccess (): retour Render_template ('Whest.html') Vous pouvez maintenant utiliser le url_for ('lsuccess') Ceci appellera la fonction d'itinéraire qui rendra la fonction le modèle souhaité


Avez-vous une fonction d'itinéraire lsuccess ?


Le code ci-dessus provient de la lsuccess uniquement, ce qui ne rend que la page d'erreur @ app.route ("/ lsuccess", méthodes = ['get', 'post']) def lsuccess (): le code que j'ai mentionné Ma page de connexion a le formulaire qui, lorsqu'il est soumis devrait rendre la page LSUCCESS, et si le nom d'utilisateur et le mot de passe sont faux, il devrait donner la page d'erreur.


3 Réponses :


0
votes
from flask import Flask, url_for, render_template, redirect
app = Flask(__name__)

@app.route('/')
def hello_world():
    username = request.form.get("uname")
    password = request.form.get("psw")

    usernamedata = db.execute("SELECT username FROM register WHERE username=:username",
                              {"username": username}).fetchone()
    passworddata = db.execute("SELECT password FROM register WHERE username=:username",
                              {"username": username}).fetchone()
    if usernamedata is None:
        return render_template("error.html")
    else:
        return redirect(url_for('lsuccess'))

@app.route('/success')
def lsuccess():
    return render_template('your_success.html')

2 commentaires

Lorsque je l'ai fait, seule la page de réussite est en train d'être rendue maintenant, même le mot de passe et le nom d'utilisateur est incorrect. et j'ai ajouté que si les déclarations utilisent l'autre:


J'ai le même résultat après l'édition, j'ai posté mon code ci-dessous, je ne comprends pas pourquoi cela ne fonctionne pas maintenant.



0
votes
@app.route("/login", methods=['GET','POST'])
def login():
    return render_template("login.html")
    uname= request.form.get("uname")
    psw = request.form.get("psw")

    usernamedata= db.execute("SELECT username FROM register WHERE username=:username",{"username":username}).fetchone()
    passworddata= db.execute("SELECT password FROM register WHERE username=:username",{"username":username}).fetchone()
    if usernamedata is None:
        return render_template("error.html")
    else:
        return redirect(url_for('lsuccess'))
    @app.route("/lsuccess",methods=['GET','POST'])
    def lsuccess():
        return render_template("lsuccess.html")
this is what my code looks like now exactly how you told, but still its rendering the success page only. this time

10 commentaires

Oui .. C'est le succès de la rendu car le nom d'utilisateur a été trouvé.


Son succès rendu même lorsque le nom d'utilisateur et le mot de passe ne sont pas présents dans la base de données. La page d'erreur n'est pas rendu


Essayez d'imprimer USERNAMEATA et de vérifier ce qu'il revient.


{% étend "layout.html"%} {% bloquide corbone%}

Logningin successuement Allez-y {{{{{ USERNAMETAA}} {% ENDBLOCK%} Ceci est mon code LSUCCESS, mais ce n'est rien à imprimer, retour Redirection (URL_FOR (URL_FOR ('LSUCCESS', USERNAMEATA = USERNAMETA)) dans mon application.py Ajouté comme ceci


Vous devez transmettre une variable à votre vue si vous souhaitez utiliser la variable .. url_for ('lsucces', variable = USERNAMEDATA


Pouvez-vous utiliser le code avec une variable ajoutée dans ce domaine et où ajouter dans le fichier lsuccess.html. Dans mon ordinateur, je ne reçois pas la page d'erreur, que je suis censée obtenir lorsque le nom d'utilisateur et les données ne sont pas dans la base de données. Je suis coincé dans ce code


Je viens de regarder à nouveau votre code, vous retournez un modèle avant de vérifier n'importe quelle logique.


Où votre formulaire soumet-elle ses données?


Le formulaire est soumis à l'action = / lsuccess


Vous soumettez des informations utilisateur à lsuccess, mais la logique de l'utilisateur de chèques est dans Connexion C'est pourquoi votre code ne fonctionne pas. Copiez le code de Uname à un autre itinéraire .. Je posterai un Répondez maintenant à la façon dont le code devrait ressembler.



0
votes

Votre formulaire soumet la demande à lsuccess qui rend simplement une page de réussite sans interroger les détails de l'utilisateur.

Copier la requête sur un autre itinéraire (la demande postale est de préférence) au total, vous aurez 3 itinéraires .

  1. itinéraire de connexion qui rend la page de connexion.
  2. vérifiez l'itinéraire que le formulaire envoie des données à, pour valider l'utilisateur et renvoyer la page d'erreur ou la page de réussite.
  3. la page de réussite qui est rendue si l'utilisateur est validé.

    code final doit ressembler à: xxx

    Enfin, modifiez l'attribut Action de votre formulaire sur action = / validation


5 commentaires

J'ai copié le même code, mais maintenant une page d'erreur arrive même lorsque le mot de passe Adn Nom d'utilisateur est correct. Je devais juste changer la route ('/ validate', méthodes = ['Get', 'Post']]. Parce que cela me donnait une erreur comme méthode non autorisée.


À propos du formulaire vous donnant une erreur concernant la méthode non autorisée , modifiez l'attribut de votre formulaire à la poste ..... et ce code ne fera que faire une page d'erreur si UsernameData n'est pas ..... Après avoir interrogé USERNAMEATA, essayez d'imprimer dans la ligne de commande et voyez le résultat ...


Merci beaucoup, j'ai fait comment vous avez dit à un moment de fonctionner correctement. Merci encore. Maintenant, la chose est que mon nom d'utilisateur est correct, un mot de passe est faux, c'est le succès de la rendu. Pouvez-vous me dire le code de le faire ...


Dans la déclaration IF où vous avez vérifié USERNAMEATA est Aucun , vérifiez si PSW est égal à PasswordData qui résoudra le problème, car ne vérifie que le nom d'utilisateur.


Je suis content de pouvoir aider .. Joyeux codage: D