Python flask __init__() got an unexpected keyword argument, почему возникает ошибка
Есть веб-приложение, в routes.py есть функция регистрации. Вроде все прописано правильно (в аналогичном коде все работает).
Возникает ошибка:
user = User(email = form.email.data, fullName = form.fullName.data, phone = form.phone.data) TypeError: __init__() got an unexpected keyword argument 'fullName'
Не могу понять причину этой ошибки, гугление говорит что это может быть из-за ключевого слова method, но я заведомо использую methods.
routes.py:
@app.route('/registration', methods = ['GET', 'POST'])
def register():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = RegistrationForm()
conn = connectDB.get_connection()
curs = conn.cursor()
if form.validate_on_submit():
user = User(email = form.email.data, fullName = form.fullName.data, phone = form.phone.data)
user.set_password(form.password.data)
conn = connectDB.get_connection()
curs = conn.cursor()
sql = "INSERT INTO users (email, passhash, fullname, phone) VALUES (%s, %s, %s, %s);"
curs.execute(sql, (user.email, user.passHash, user.fullName, user.phone))
conn.commit()
curs.close()
conn.close()
flash('Вы успешно зарегистрированны')
return redirect(url_for('index'))
return render_template('registration.html', form = form)
users.py:
class User(UserMixin):
def __init__(self,id=None,email=None,passHash=None, fullName=None, phone=None):
self.id = id
self.email = email
self.passHash = passHash
self.fullName = fullName
self.phone = phone
def set_password(self, password):
self.passHash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.passHash, password)
def get_id(self):
return self.id
class RegistrationForm(FlaskForm):
fullName = StringField('ФИО', validators = [DataRequired('Это обязательное поле'), Length(min = 8, max = 30, message = 'Длина должна быть между %(min)d и %(max)d символами')])
email = StringField('Электронная почта', validators = [DataRequired('Это обязательное поле'), Email(message="Некорректный почтовый адрес"), Length(min = 8, max = 40, message = 'Длина должна быть между %(min)d и %(max)d символами')])
password = PasswordField('Пароль', validators=[DataRequired(message="Это обязательное поле"), Length(min=6, max=32, message='Длина должна быть между %(min)d и %(max)d символами')])
password2 = PasswordField('Повторите пароль', validators=[DataRequired(message="Это обязательное поле"), EqualTo('password', message='Пароли должны совпадать')])
phone = StringField('Номер телефона', validators=[Length(min = 11, max = 12, message = 'Длина должна быть между %(min)d и %(max)d символами')])
submit = SubmitField('Регистрация')
Ответы (1 шт):
Автор решения: sanok10
→ Ссылка
После проверки, оказалось что объявление класса происходило в том же файле что и должно, но на пару сотен версий раньше. Как это вышло - хз, в редакторе был открыт нужный файл. Открыть дыру в пространственно-временном континууме помогло "go to definition" из vs code, оно показало что обращается к версии класса в которой и правда еще нет никаких "fullname".