Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 4, 2017 16:49:41

ab
Зарегистрирован: 2017-01-31
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

Здравствуйте.
Не могу разобраться почему валидаторы всегда возвращают 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

views.py
 @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)  #Здесь я проверял что параметры приходят верно

Офлайн

#2 Фев. 4, 2017 16:52:27

ab
Зарегистрирован: 2017-01-31
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

Пробовал в views.py “form = SignupForm(request.form)”, не помогло, работает идентично (параметры из формы передаются в error.html как и без request.form)

Офлайн

#3 Фев. 4, 2017 17:56:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

ab
request.form
фласк я давно не юзал, но вряд ли пост или гет данные достаются из реквеста через такое свойство.



Офлайн

#4 Фев. 4, 2017 18:16:16

ab
Зарегистрирован: 2017-01-31
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

Ок, а почему все же валидатор не валидирует?
Не получает данные?

Офлайн

#5 Фев. 4, 2017 18:38:40

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

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)

Вот тут да, тут видно, что форма заполняется данными из POST. А у вас нет.



Офлайн

#6 Фев. 4, 2017 18:40:26

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

Погодите!
У вас вообще откуда в представлении реквест взялся?

  @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':     # ЧТО ЗА МАГИЯ?????



Офлайн

#7 Фев. 4, 2017 21:22:45

ab
Зарегистрирован: 2017-01-31
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

FishHook
Погодите!У вас вообще откуда в представлении реквест взялся?

https://code.tutsplus.com/tutorials/intro-to-flask-signing-in-and-out–net-29982
Вот здесь так.

Офлайн

#8 Фев. 4, 2017 22:31:27

ab
Зарегистрирован: 2017-01-31
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

В общем я хз почему то не работало.
Переделал, исходя из примера здесь

Офлайн

#9 Фев. 4, 2017 23:12:37

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

FishHook
фласк я давно не юзал, но вряд ли пост или гет данные достаются из реквеста через такое свойство.
Именно так и передаются

FishHook
Погодите!
У вас вообще откуда в представлении реквест взялся?

Во flask-е request является глобальным объектом. В любом вью можно импортнуть request и получить данные. Добро пожаловать во Flask:)



Офлайн

#10 Фев. 4, 2017 23:18:03

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Flask + WTForms: проблема с Validation

ab
В общем я хз почему то не работало.
Ну request.form в форму надо обязательно передавать, как вам уже выше написали. Если и с ним не работает, тогда не знаю, видимо форму заполняли с ошибками по запарке.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version