【问题标题】:flask wtform TypeError: __init__() takes from 1 to 2 positional arguments but 3 were givenflask wtform TypeError: __init__() 接受 1 到 2 个位置参数,但给出了 3 个
【发布时间】:2017-10-09 01:31:40
【问题描述】:

我在表单验证方面遇到问题。国家/地区列表生成正确,以前的表格工作正常。它只是中断 POST 请求。

这是我的forms.py:

from wtforms import Form, BooleanField, SelectField, \
                    StringField, PasswordField, SubmitField, validators, \
                    RadioField
from ..models import User
from pycountry import countries
...
## Account settings
# We get all COUNTRIES
COUNTRIES = [(c.name, c.name) for c in countries]
# edit profile
class ProfileForm(Form):
    username = StringField('name',[validators.Length(min=1, max=120), validators.InputRequired])
    email = StringField('email', [validators.Length(min=6, max=120), validators.Email()])
    company = StringField('name',[validators.Length(min=1, max=120)])
    country = SelectField('country', choices=COUNTRIES)
    news = BooleanField('news')

这是视图:

@user.route('/profile/', methods=['GET', 'POST'])
@login_required
def profile():
    userid = current_user.get_id()
    user = User.query.filter_by(id=userid).first_or_404()
    print(user)
    form = ProfileForm(request.form)
    if request.method == 'POST' and form.validate():
        user.username = form.username.data
        ...
        return render_template('settings.html', form=form )
    else:
        form.username.data = user.username
        ...
        return render_template('settings.html', form=form )

【问题讨论】:

  • 在 settings.html 我使用 {{ form.field}} 来生成每个表单字段
  • 尝试form = ProfileForm(request.POST) 而不是ProfileForm(request.form)。如果您提供堆栈跟踪的其余部分会有所帮助
  • 我不工作。这是堆栈跟踪:pastebin.com/Lq00syTz
  • 如果我打印 form.data 一切似乎都很好:{'news': True, 'username': 'asdf', 'country': 'Aruba', 'company': 'asDf', '电子邮件':'asdf@asdf.com'}
  • 检查 form.errors 字典,看看它是否包含任何内容。它可能缺少 CSRF 密钥

标签: python flask wtforms


【解决方案1】:

它应该是 validators.InputRequired() 而不是 validators.InputRequired。谢谢@jackevans

【讨论】:

  • 浪费了这么多时间……可惜 Python 没有早点发现这些愚蠢的错误。有时我想知道如何在动态类型语言中构建任何健壮的东西。谢谢@jmrueda。
猜你喜欢
  • 2023-03-03
  • 2015-07-13
  • 1970-01-01
  • 2017-04-22
  • 2017-02-18
  • 2022-01-04
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
相关资源
最近更新 更多