python/flask-比较用户输入和数据库值

disbfnqx  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(405)

我试着通过使用python和flask来学习一些东西,遇到了一些我不太理解的东西——希望有人能够帮助或解释这种行为。
我没有建立任何真实的东西,只是想了解和理解这里发生了什么。
我正在python/flask中使用注册/登录表单,并且正在努力处理登录部分。
我已经建立了一个注册,从中可以将名称、电子邮件和密码(unhashed,稍后提供)写入一个简单的表“users”,表的结构是| id | name | email | password |,除了id是int和自动递增外,所有值都是varchar。
我的进口是

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”应用程序路径如下

@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

因此它们不相等,登录失败。
有人能帮我引路吗,或者解释一下发生了什么事?
提前谢谢。

5sxhfpxr

5sxhfpxr1#

这里有两件主要的事情需要理解:1。数据库返回的内容2。你的表格是什么
为了了解如何使登录生效,您必须了解如何确保表单和数据库提供的输入/结果可以进行比较。
在你的问题中,你说数据库正在返回('1234',)。这是python中的一个元组,可以编制索引。索引元组,就像这样

pwCheck[0]

将返回“1234”。
因此,与其比较数据库查询返回的原始结果,不如了解数据库返回的数据在与表单输入进行比较之前需要更多的处理。
您可以添加一个额外的行来创建一个新变量db\u pwd,如下所示

db_pwd = pwCheck[0]

然后检查db\u pwd==passwd

相关问题