Форум сайта python.su
Здравствуйте.
Не могу разобраться почему валидаторы всегда возвращают False
То есть всегда переход на error.html
Помогите, пожалуйста)
Python 3.5, Flask==0.12, Flask-WTF==0.14.2, WTForms==2.1
forms.py:
class SignupForm(Form): name = StringField("Ваше имя", [validators.DataRequired("Необходимо ввести имя")]) email = StringField("Ваш E-mail", [validators.DataRequired("Необходимо ввести E-mail"), validators.Email("Необходимо ввести корректный E-mail")]) password = PasswordField('Создайте пароль', [validators.DataRequired("Необходимо ввести пароль")]) submit = SubmitField("Создать аккаунт") def __init__(self, *args, **kwargs): Form.__init__(self, *args, **kwargs) def validate(self): if not Form.validate(self): return False user = User.query.filter_by(email=self.email.data.lower()).first() if user: self.email.errors.append("Этот E-mail уже зарегистрирован в системе") return False else: return True
@app.route('/signup', methods=['GET', 'POST']) def signup(): form = SignupForm() name = form.name.data email = form.email.data password = form.password.data if request.method == 'GET': return render_template('signup.html', form=form) elif request.method == 'POST' and form.validate(): return "[1] Create a new user [2] sign in the user [3] redirect to the user's profile" else: return render_template('error.html', password=password) #Здесь я проверял что параметры приходят верно
Офлайн
Пробовал в views.py “form = SignupForm(request.form)”, не помогло, работает идентично (параметры из формы передаются в error.html как и без request.form)
Офлайн
abфласк я давно не юзал, но вряд ли пост или гет данные достаются из реквеста через такое свойство.
request.form
Офлайн
Ок, а почему все же валидатор не валидирует?
Не получает данные?
Офлайн
abДык вы в форму не передаете данные из реквеста.
Не получает данные?
def signup(): form = SignupForm() name = form.name.data email = form.email.data password = form.password.data
def edit_profile(request): user = User.objects.get(pk=request.session['userid']) form = EditProfileForm(request.POST, obj=user) if request.POST and form.validate(): form.populate_obj(user) user.save() return redirect('/home') return render_to_response('edit_profile.html', form=form)
Офлайн
Погодите!
У вас вообще откуда в представлении реквест взялся?
@app.route('/signup', methods=['GET', 'POST']) def signup(): form = SignupForm() name = form.name.data email = form.email.data password = form.password.data if request.method == 'GET': # ЧТО ЗА МАГИЯ?????
Офлайн
FishHook
Погодите!У вас вообще откуда в представлении реквест взялся?
Офлайн
В общем я хз почему то не работало.
Переделал, исходя из примера здесь
Офлайн
FishHookИменно так и передаются
фласк я давно не юзал, но вряд ли пост или гет данные достаются из реквеста через такое свойство.
FishHook
Погодите!
У вас вообще откуда в представлении реквест взялся?
Офлайн
abНу request.form в форму надо обязательно передавать, как вам уже выше написали. Если и с ним не работает, тогда не знаю, видимо форму заполняли с ошибками по запарке.
В общем я хз почему то не работало.
Офлайн