提交表单后,如何解决validate_on_submit()函数引发的异常 - python

这是

我遵循了很多线程,这些问题表明问题代码存在于表单类的验证器中,但是我已经检查了它们。.此处为fo中的类代码

1.这是来自forms.py的代码

from flask_wtf import Form
from wtforms import StringField, SubmitField, BooleanField, PasswordField
from wtforms.validators import DataRequired, Length, email, EqualTo, Required


class RegistrationForm(Form):
    username = StringField('username', validators=[DataRequired(),
                                                   Length(min=2, max=20)])
    email = StringField('email', validators=[DataRequired(), email])
    password = PasswordField('password', validators=[DataRequired()])
    conf_password = PasswordField('conf_pass', validators=[DataRequired(),
                                                           EqualTo('password', message='passwords must match')])
    submit = SubmitField('sign up')

2.这是模板文件中的代码

  {% extends 'layout.html' %}
{% block content %}
   <div class="card" width="300px">
      <form method="post" action="">
          {{ form.hidden_tag() }}
          <feildset>
              <legend>
                  join Today
              </legend>
          </feildset>
          <hr>
          {{ form.username.label }}
          {{ form.username }}
          {{ form.email.label }}
          {{ form.email }}
          {{ form.password.label }}
          {{ form.password }}
          {{ form.conf_password.label }}
          {{ form.conf_password() }}
          {{ form.submit(class='success button centering') }}
      </form>
   </div>
{% endblock %}   

3.这是来自app.py的代码

@app.route('/reg', methods=['GET', 'POST'])
def show_reg():
    form = RegistrationForm()
    if form.validate_on_submit():
        flash(f'Account created for {form.username.data}!', 'success')
        return redirect(url_for('home'))
    return render_template('register.html', title='register', form=form)

3. stacktrace:

Traceback (most recent call last):
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/root/PycharmProjects/site/app.py", line 37, in show_reg
    if form.validate_on_submit():
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask_wtf/form.py", line 101, in validate_on_submit
    return self.is_submitted() and self.validate()
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/wtforms/form.py", line 310, in validate
    return super(Form, self).validate(extra)
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/wtforms/form.py", line 152, in validate
    if not field.validate(self, extra):
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/wtforms/fields/core.py", line 206, in validate
    stop_validation = self._run_validation_chain(form, chain)
  File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/wtforms/fields/core.py", line 226, in _run_validation_chain
    validator(form, self)
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given

参考方案

最好的机会是,问题出在email验证器中:wtforms期望一个类实例,但是您已经传递了一个类,因此,当wtforms执行validator(form, self)时,它们将调用类的init方法,而不是实例的调用方法。更改为validators=[DataRequired(), email()]应该可以解决。

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

python websocketapp on_message()方法不起作用 - python

我使用python通过以下python代码从nodejs服务器接收流数据。Websocket假定获取实时流数据。而且我认为python的WebSocketApp获取流数据的唯一方法是通过on_message()。但是,尽管可以成功建立连接,但永远不会调用on_message()。 on_open()仍被调用,并且ping消息已定期发送到服务器以维持心跳。我通…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

如何用'-'解析字符串到节点js本地脚本? - python

我正在使用本地节点js脚本来处理字符串。我陷入了将'-'字符串解析为本地节点js脚本的问题。render.js:#! /usr/bin/env -S node -r esm let argv = require('yargs') .usage('$0 [string]') .argv; console.log(argv…

TypeError:'str'对象不支持项目分配,带有json文件的python - python

以下是我的代码import json with open('johns.json', 'r') as q: l = q.read() data = json.loads(l) data['john'] = '{}' data['john']['use…