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条路线。
- 呈现登录页面的登录路由。
- 检查表单将数据发送到的路由,以验证用户和returns错误页面或成功页面。
- 用户通过验证后呈现的成功页面。
最终代码应如下所示:
@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
我正在尝试使用此代码登录在 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条路线。
- 呈现登录页面的登录路由。
- 检查表单将数据发送到的路由,以验证用户和returns错误页面或成功页面。
- 用户通过验证后呈现的成功页面。
最终代码应如下所示:
@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