【发布时间】:2020-06-03 18:57:53
【问题描述】:
我在这里尝试使用 Python 和 Flask 边做边学,但遇到了一些我不太理解的事情 - 希望那里的人能够帮助或解释这种行为。
我没有构建任何真实的东西,只是想学习和理解这里发生了什么。
我正在使用 Python/Flask 中的注册/登录表单,正在为登录部分苦苦挣扎。
我已经建立了一个注册,其中将姓名、电子邮件和密码(未经过哈希处理,稍后会出现)写入一个简单的表“用户”,并带有 |身份证 |姓名 |电子邮件 |密码 |结构,所有值都是 varchar,除了 ID 是 INT 和自动增量。
我的进口是
import os
from flask import Flask, session, request
from flask_session import Session
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from flask import Flask, render_template
app = Flask(__name__)
# Set up database
engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))
我有一个如下所示的 html 登录表单
<form action="{{ url_for('login') }}" method="post">
<div class="form-group">
<label for="email">E-mail:</label>
<input type="email" name="email" class="form-control" placeholder="Enter email">
</div>
<div class="form-group">
<label for="pwd">Password:</label>
<input type="password" name="pwd" class="form-control" placeholder="Enter password">
</div>
<button type="submit" class="btn btn-primary">Login</button>
</form>
<p> {{ logintry }}
我的'login'的Flask申请路径如下
@app.route("/login", methods=['GET', 'POST'])
def login():
if request.method == 'POST':
uname = request.form.get("email")
passwd = request.form.get("pwd")
pwCheck = db.execute("SELECT password FROM users WHERE email = :uname", {"uname": uname}).fetchone()
if pwCheck == passwd:
return render_template("authenticated.html")
else:
return render_template("login.html", logintry="Login Failure")
else:
return render_template("login.html")
在此示例中,我尝试使用 test@test.com 电子邮件登录,密码为 1234
我遇到的问题是数据库值似乎返回为
('1234',)
而用户输入只是简单地呈现为
1234
因此它们不相等,登录失败。
谁能在这里帮助指导我,或者解释一下发生了什么?
提前致谢。
【问题讨论】:
-
调用数据库值后能显示是什么类型吗?类型(数据库值)
-
为什么你不能简单地做
if pwCheck and pwCheck[1] == passwd: