【问题标题】:Flask receiving empty POST formFlask 接收空的 POST 表单
【发布时间】:2022-02-02 04:12:32
【问题描述】:

无法理解,为什么这段代码不起作用,我试图理解,但我只是在学习 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)

【问题讨论】:

  • 您能否尝试使用 Chrome DevTools 中的“网络”选项卡来确认 POST 请求实际上包含您所期望的表单数据?
  • @ChrisSears,是的,我在 Payload 中找到了它们,状态码是 200
  • 接下来我要检查的是记录 request.form 的值,看看表单数据是否达到了那个程度。
  • @ChrisSears,完成,在 reg = Users(uname=username, useremail=useremail, upasswrd=userpasswd) 之前添加了写入文件,所有参数都写入了文件,接下来我可以做什么?跨度>
  • def __init__(self, **kwargs): self.uname = kwargs.get('name') self.email = kwargs.get('email') self.upasswrd = kwargs.get( 'password') def get_token(self, expire_time=1): expire_delta = timedelta(expire_time) token = create_access_token(identity=self.uid, expires_delta=expire_delta) return token

标签: python flask flask-sqlalchemy


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    问题出在课堂上,我忘记补充了(真的很抱歉)

    所以,我来描述一下:

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

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

    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')
    

    【讨论】:

      猜你喜欢
      • 2013-04-16
      • 1970-01-01
      • 2013-02-25
      • 2010-12-16
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      相关资源
      最近更新 更多