'TypeError: __init __ () принимает от 1 до 2 позиционных аргументов, но 3 были заданы' - PullRequest
1 голос
/ 01 февраля 2020
@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)

'Ошибка типа: init () принимает от 1 до 2 позиционных аргументов, но 3 задано'. Привет всем. Извините за беспокойство. Мой учитель назначил нам это задание. В строке validate () в строке 4 всегда отображается ошибка. Могу ли я узнать, что это за ошибка?

[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()])

1 Ответ

1 голос
/ 01 февраля 2020

wtforms.validators.Email должен быть создан для поля email вашей формы.

wtform ожидает список вызываемых валидаторов , которые он вызывает с экземпляром поля и формы.

Причиной ошибки в вашем коде является то, что вызывается класс валидатора Email, то есть создается с полем и формой вместо выполнения проверки для поля электронной почты .

email=StringField('Email:',[validators.Email<b>()</b>,validators.DataRequired()])
...