【问题标题】:Python flask database retrievalPython烧瓶数据库检索
【发布时间】:2020-05-02 21:12:58
【问题描述】:

我正在使用烧瓶创建登录页面。在这里,我正在使用 sql_alchemy 检索电子邮件和密码,但它显示错误 can't concatenate str with int at if userdetails['Email'] == username and userdetails['Password'] == userpass

@app.route('/login/', methods=['POST', 'GET'])
def login():
    if 'user' in session and session['user'] == params['admin_user']:
        return render_template('domain.html')
       if request.method == 'POST':
            username = request.form.get('email')
            userpass = request.form.get('password')
            userdetails = User.query.filter_by(Email=username)

            if len(str(userdetails)) > 0:
                if userdetails['Email'] == username and userdetails['Password'] == userpass:
                    session['user'] = username
                    flash('Welcome' + session['Name'] + '! You have been successfully logged in', 'success')
                    return render_template('domain.html')
                else:

                    flash('Password does not match.', 'danger')
                    return render_template('user_login.html')
            else:
                flash('User not found.', 'danger')
                return render_template('user_login.html')
        return render_template('user_login.html')

【问题讨论】:

  • 请将您的代码以文本形式发布,Stack Overflow 上不接受代码图像。
  • 该错误告诉您您尝试在需要字符串的地方使用整数,您的用户名或密码是整数吗?您可以尝试将它们转换为字符串吗?

标签: python sql flask


【解决方案1】:

能不能在末尾加.one()

userdetails = User.query.filter_by(Email=username)

应该是这样的:userdetails = User.query.filter_by(Email=username).one()

如果我没记错的话,filter_by 返回的是结果列表,而不是结果本身。

编辑:我看到您还使用userdetails 来检查查询中是否有任何匹配项。

那么我建议您在查询端保持原样,并在 if 语句下添加另一个变量来检查结果匹配。最终版本应该是这样的:

@app.route('/login/', methods=['POST', 'GET'])
def login():
    if 'user' in session and session['user'] == params['admin_user']:
        return render_template('domain.html')
       if request.method == 'POST':
            username = request.form.get('email')
            userpass = request.form.get('password')
            userdetails = User.query.filter_by(Email=username)

            if userdetails.count() > 0:
                user = userdetails.one()
                if user['Email'] == username and user['Password'] == userpass:
                    session['user'] = username
                    flash('Welcome' + session['Name'] + '! You have been successfully logged in', 'success')
                    return render_template('domain.html')
                else:

                    flash('Password does not match.', 'danger')
                    return render_template('user_login.html')
            else:
                flash('User not found.', 'danger')
                return render_template('user_login.html')
        return render_template('user_login.html')

【讨论】:

    猜你喜欢
    • 2020-10-27
    • 2020-02-29
    • 2017-09-03
    • 2019-02-24
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多