【问题标题】:'TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given''TypeError: __init__() 采用 1 到 2 个位置参数,但给出了 3 个'
【发布时间】:2020-02-01 06:15:36
【问题描述】:
@app.route('/update/<id>',methods=['GET','POST'])
def update_user(id):
    updateuser=CreateUserForm(request.form)
    if request.method=='POST' and updateuser.validate():
        db=shelve.open('user.db','w')
        user=[]
        user=db[id]
        user.set_username(updateuser.username.data)
        user.set_password(updateuser.password.data)
        user.set_email(updateuser.email.data)
        user.set_contact(updateuser.contact.data)
        user.set_address(updateuser.address.data)
        return redirect(url_for('retrieve_user'))
    else:
        db=shelve.open('user.db','r')
        user=db[id]
        updateuser.password.data=user.get_password()
        updateuser.contact.data=user.get_contact()
        updateuser.email.data=user.get_email()
        updateuser.username.data=user.get_username()
        updateuser.address.data=user.get_address()
        return render_template('updatecreateuser.html',updateuser=updateuser)

'TypeError: init() 接受 1 到 2 个位置参数,但给出了 3 个'。大家好。不好意思,打扰了。我的老师给我们布置了这个作业。它总是在第 4 行的 validate() 部分显示错误。我可以知道错误是什么吗?

[2020-02-01 14:11:51,076] ERROR in app: Exception on /update/7bffa7fc-0815-48ae-a773-e16d8ab1ffe5 [POST]
Traceback (most recent call last):
  File "C:\Program Files\Python37\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Program Files\Python37\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Program Files\Python37\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Program Files\Python37\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Program Files\Python37\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Program Files\Python37\lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:/NYP/year 1/Sem 2/People's_file/Login/simplaeapplication.py", line 75, in update_user
    if request.method=='POST' and updateuser.validate():
  File "C:\Program Files\Python37\lib\site-packages\wtforms\form.py", line 310, in validate
    return super(Form, self).validate(extra)
  File "C:\Program Files\Python37\lib\site-packages\wtforms\form.py", line 152, in validate
    if not field.validate(self, extra):
  File "C:\Program Files\Python37\lib\site-packages\wtforms\fields\core.py", line 206, in validate
    stop_validation = self._run_validation_chain(form, chain)
  File "C:\Program Files\Python37\lib\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
127.0.0.1 - - [01/Feb/2020 14:11:51] "POST /update/7bffa7fc-0815-48ae-a773-e16d8ab1ffe5 HTTP/1.1" 500 -
from wtforms import Form, StringField, RadioField, SelectField, TextAreaField, validators, BooleanField,PasswordField
class CreateUserForm(Form):
    username = StringField('UserName', [validators.Length(min=1,max=150), validators.DataRequired()])
    password = PasswordField('New Password', [validators.InputRequired(), validators.EqualTo('confirm', message='Passwords must match')])
    confirm  = PasswordField('Repeat Password')
    email=StringField('Email:',[validators.Email,validators.DataRequired()])
    contact=StringField('Contact',[validators.DataRequired()])
    address=TextAreaField('Address:',[validators.DataRequired()])

【问题讨论】:

  • 嘿,你的表格也可以吗?
  • 我刚刚上传了我的表单代码

标签: wtforms


【解决方案1】:

wtforms.validators.Email 应该在表单的email 字段中实例化。

wtform expects a list of callable validators 使用字段和表单的实例调用。

您的代码中出现错误的原因是 Email 验证器类被调用,即使用字段和表单构造,而不是对电子邮件字段执行验证。

email=StringField('Email:',[validators.Email(),validators.DataRequired()])

【讨论】:

    猜你喜欢
    • 2021-01-16
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2017-10-09
    • 2015-07-13
    相关资源
    最近更新 更多