Vas*_*le 5 python mysql flask pythonanywhere
尝试为我的应用创建一个注册页面。我正在使用来自pythonanywhere.com 的Flask 框架和 MySQL 数据库。
@app.route('/register/', methods=["GET","POST"]) 
def register_page():
try:
    form = RegistrationForm(request.form)
    if request.method == "POST" and form.validate():
        email = form.email.data
        password = sha256_crypt.encrypt((str(form.password.data)))
        c, conn = connection()
        x = c.execute("SELECT * FROM users WHERE email = (%s)",
                      (email))
        if int(x) > 0:
            flash("That email adress is already in use.")
            return render_template('register.html', form=form)
        else:
            c.execute("INSERT INTO users (email, password) VALUES (%s, %s)",
                      (thwart(email),thwart(password)))
            conn.commit()
            flash("Thanks for registering!")
            c.close()
            conn.close()
            gc.collect()
            session['logged_in'] = True
            session['email'] = email
            return redirect(url_for('dashboard'))
    return render_template("sign-up.html", form=form)
except Exception as e:
    return(str(e))}
在运行时,我收到错误:在字符串格式化过程中未转换所有参数。如何解决?可能是这个语句的问题?
c.execute("INSERT INTO users (email, password) VALUES (%s, %s)",
                          (thwart(email),thwart(password)))
只是将我之前的评论转换为答案,因为它似乎是正确的解决方案:-)
问题来自不同的线路。你有这个:
        x = c.execute("SELECT * FROM users WHERE email = (%s)",
                      (email))
这并不像您认为的那样。放在email方括号中没有任何作用,因此该行实际上相当于在字符列表中传入该变量中的任何字符的每个字符。如果你这样做:
        x = c.execute("SELECT * FROM users WHERE email = (%s)",
                      (email,))
...然后你将传入一个包含一项的元组,email,它应该工作得更好。
| 归档时间: | 
 | 
| 查看次数: | 2992 次 | 
| 最近记录: |