-2
from flask_wtf import FlaskForm
from flask_login import current_user
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, EqualTo
from Flaskfile.models import user
class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(),  Length(min=2, max=20)])
    email = StringField('email', validators=[DataRequired()])
    password = PasswordField('password', validators=[DataRequired()])
    Confirm_password= PasswordField('Confirm password', validators=[DataRequired(), EqualTo('password')])
    submit=  SubmitField('Sign up')
#remember to include validation error messge

class LoginForm(FlaskForm):
    """docstring for LoginForm"""
    email = StringField('Email', validators=[DataRequired() ])
    password = PasswordField('Password', validators=[DataRequired()])
    submit=  SubmitField('Login')


# <!-- #setting up the update account form -->
class UpdateAccountForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(),  Length(min=2, max=20)])
    email = StringField('email', validators=[DataRequired()])
    submit=  SubmitField('Update')

    def validate_username(self, username):
        if username.data != current_user.username:
            user=user.query.filter_by(username=username.data).first()
        if user:
                raise validationError('That user is taken')

    def validate_email(self, email):
        if email.data != current_user.email:
            user=user.query.filter_by(username=email.data).first()
            if user:
                raise validationError('That user is taken')
khelwood
  • 55,782
  • 14
  • 81
  • 108
Anamsken
  • 1
  • 1
  • 3
    If you don't end up in your `if username.data...` case then `user` is never defined. Same with `if email.data...` – Cory Kramer Aug 17 '20 at 14:12
  • the error is saying it all, in your function `validate_username` if the first condition is not verified then the user variable is not defined, you better indent it as you're doing in `validate_email` function – Mohammed Janati Idrissi Aug 17 '20 at 14:13
  • Does this answer your question? [Short description of the scoping rules?](https://stackoverflow.com/questions/291978/short-description-of-the-scoping-rules) – Yamirui Aug 17 '20 at 14:13

1 Answers1

0

This might be due to improper indentation. Try this,


from flask_wtf import FlaskForm
from flask_login import current_user
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, EqualTo
from Flaskfile.models import user
class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(),  Length(min=2, max=20)])
    email = StringField('email', validators=[DataRequired()])
    password = PasswordField('password', validators=[DataRequired()])
    Confirm_password= PasswordField('Confirm password', validators=[DataRequired(), EqualTo('password')])
    submit=  SubmitField('Sign up')
#remember to include validation error messge

class LoginForm(FlaskForm):
    """docstring for LoginForm"""
    email = StringField('Email', validators=[DataRequired() ])
    password = PasswordField('Password', validators=[DataRequired()])
    submit=  SubmitField('Login')


# <!-- #setting up the update account form -->
class UpdateAccountForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(),  Length(min=2, max=20)])
    email = StringField('email', validators=[DataRequired()])
    submit=  SubmitField('Update')

    def validate_username(self, username):
        if username.data != current_user.username:
            user=user.query.filter_by(username=username.data).first()
            if user:
                raise validationError('That user is taken')

    def validate_email(self, email):
        if email.data != current_user.email:
            user=user.query.filter_by(username=email.data).first()
            if user:
                raise validationError('That user is taken')
Kuldip Chaudhari
  • 1,112
  • 4
  • 8