将html变量传递给flask中的函数时出错

时间:2015-09-16 06:23:01

标签: python html sqlite variables flask

我正在尝试将用户注册到sqlite数据库中。 我的表单包含一个带有数值的隐藏字段。

当我处理表单时,它返回以下错误: “浏览器(或代理)发送了此服务器无法理解的请求。”

这显然意味着变量未传递给函数。

我怎么能解决这个问题? 我已经尝试在发送到函数之前将数据类型更改为后端的int(),我已将字段显示为etcetc。没有任何效果。

有趣的是:当我在后端使用“打印”功能并禁用“User.regUser(电子邮件,用户名,密码,排名)”时,它们的值会显示在控制台中...所以我会假设变量包含我需要传递给函数的信息。

以下是代码:

查看:

@app.route('/register', methods=['GET', 'POST'])
def register():
    #if request.method == 'POST':encrypt
    email = request.form['email']
    username = request.form['username']
    password = generate_password_hash(request.form['pass1'])
    rank = int(request.form['rank'])

    print(email, password, username, rank)
    User.regUser(email, username, password, rank)

#    db.session.add(User(email, username, password, "50"))
#    db.session.commit()
    return render_template('register.html')

型号:

from pjctBB.views import db


class User(db.Model):

    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String, nullable=False)
    username = db.Column(db.String, nullable=False)
    password = db.Column(db.String, nullable=False)
    rank = db.Column(db.Integer, nullable=False)

    def __init__(self, email, username, password, rank):
        self.email = email
        self.username = username
        self.password = password
        self.rank = rank

    def regUser(self, email, username, password, rank):

        db.session.add(User(email, username, password, rank))
        db.session.commit()

非常感谢!

2 个答案:

答案 0 :(得分:0)

根据我收集的内容,您尝试从表单中请求而不先呈现它,这意味着没有表单可以获取或发布。试试这个:

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.mthod == 'GET':
               return render_template('register.html')

    elif request.method == 'POST':

              email = request.form['email']
              username = request.form['username']
              password = generate_password_hash(request.form['pass1'])
              rank = int(request.form['rank'])

              print(email, password, username, rank)
              User.regUser(email, username, password, rank)

              #db.session.add(User(email, username, password, "50"))
              #db.session.commit()
              return render_template('register.html')

假设register.html存在。

答案 1 :(得分:0)

感谢大家对我提问的兴趣。它让我思考了一下:)

我对SO的问题略有不同,2位用户给了我一个解决方案。 我发现有人遇到了与我类似的问题,请查看此主题以寻找可能的解决方案:

Flask registration error: missing 1 positional argument