Flask 收到空 POST 表格

Flask receiving empty POST form

无法理解,为什么这段代码不起作用,我试图理解,但我只是在学习 Flask&Py,请帮助我:

烧瓶:

@freepylib.route('/register', methods=['POST', 'GET'])
def signup_user():
    if request.method == "POST":
        username, useremail, userpasswd=request.form['name'], request.form['email'], request.form['password']
        reg = Users(uname=username, useremail=useremail, upasswrd=userpasswd)
        try:
            mydb.session.add(reg)
            mydb.session.commit()
            token = reg.get_token()
            return {'access_token': token}
        except Exception as e:
            return str(e)
    else:
        return render_template("register.html")

HTML代码:

<form method="POST" name="reg" id="reg">
  <input type ="text" class ="fadeIn second" name ="name" placeholder="name">
  <input type="text" class="fadeIn second" name="email"  placeholder="email">
  <input type="text" class="fadeIn third" name="password" placeholder="password">
  <input type="submit" name="subm" class="fadeIn fourth" value="Sign Up">
</form>

错误:

(pymysql.err.IntegrityError) (1048, "Column 'uname' cannot be null") [SQL: INSERT INTO `PFL_USERS` (uname, email, upasswrd) VALUES (%(uname)s, %(email)s, %(upasswrd)s)] [parameters: {'uname': None, 'email': None, 'upasswrd': None}] (Background on this error at: http://sqlalche.me/e/13/gkpj)

我认为问题出在您的用户 class 和 __init__ 中。 kwargs 需要与您从应用代码中调用构造函数的方式相匹配。

例如,将其更改为这样应该会有所帮助:

def __init__(self, **kwargs): 
    self.uname = kwargs.get('uname')
    self.email = kwargs.get('useremail') 
    self.upasswrd = kwargs.get('upasswrd')

特别感谢@ChrisSears,你让我开心

问题出在class,我忘记添加了(我真的很抱歉)

所以,我将描述:

reg = Users(uname=username, email=useremail, upasswrd=hash_password(userpasswd))

使用这个,我已经将数据传输到 Class 用户:

def __init__(self, **kwargs):
    self.uname = kwargs.get('name')
    self.email = kwargs.get('email')
    self.upasswrd = kwargs.get('password')

可以看到,变量名不正确,所以有问题,应该是这样的:

def __init__(self, **kwargs):
    self.uname = kwargs.get('uname')
    self.email = kwargs.get('email')
    self.upasswrd = kwargs.get('upasswrd')