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')
Asked
Active
Viewed 61 times
-2
-
3If 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 Answers
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