python 使用 flask 和 psql 代码的登录页面代码不起作用

login page code for python using flask and psql code not working

我正在尝试使用此代码登录在 psql 中有数据库的帐户,但由于某种原因我只能呈现错误页面,而没有成功页面

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")

uname 和 psw 是从表单中获取的用户名和密码。

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

@app.route('/')
def hello_world():
    ...
    ...
            #Don't know why you added an if Statement here
            if True:
                # 'lsuccess' is the name of your route function you are redirecting to
                return redirect(url_for('lsuccess'))

            #this statement is never reachable
            else:
                return render_template("error.html")

#You NEED A ROUTE FUNCTION named lsuccess, in this function, `render a template`
@app.route('/success')
def lsuccess():
    return render_template('your_success.html')

if True 不会对您的代码产生任何影响,因为条件将始终为真并且 else 块永远不会 运行.

if usernamedata is None 条件足以确保用户存在。

在else语句中,passworddata returns只有一个值e.g "password",使用for循环会遍历每个字符e.g.p, a等等.

删除for循环,删除if True然后删除else块。

最终代码应如下所示:

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')
@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")

这就是我的代码现在的样子,与您所说的完全一样,但它仍然只呈现成功页面。这次

您的表单向 lsuccess 提交请求,它只呈现一个成功页面而不查询用户详细信息。

将查询复制到另一条路线(最好是POST只请求)总共你将有3条路线。

  1. 呈现登录页面的登录路由。
  2. 检查表单将数据发送到的路由,以验证用户和returns错误页面或成功页面。
  3. 用户通过验证后呈现的成功页面。

最终代码应如下所示:

@app.route("/login", methods=['GET','POST'])
def login():
    return render_template("login.html") 

@app.route('/validate', methods=['POST'])
def validate():
    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")

最后,将表单的 action 属性更改为 action=/validate