Skip to content

Instantly share code, notes, and snippets.

@mickey06
Created February 12, 2013 16:00
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mickey06/4770903 to your computer and use it in GitHub Desktop.
Save mickey06/4770903 to your computer and use it in GitHub Desktop.
Flask login with wtfoms validation
class LoginForm(flask_wtf.Form):
"""
Validate login from
"""
email_validator = [flask_wtf.Required()]
pwd_validator = [flask_wtf.Required(), flask_wtf.Length(2)]
email = flask_wtf.TextField(u'email', validators=email_validator)
password = flask_wtf.PasswordField(u'password', validators=pwd_validator)
submit = flask_wtf.SubmitField("Login")
def _get_user(self, email):
return mongo.db.users.find_one({'email': email})
def validate_email(self, field):
if not self._get_user(field.data):
raise flask_wtf.ValidationError("Invalid email")
def validate_password(self, field):
user = self._get_user(self.email.data)
if user and user[u'password'] != field.data:
raise flask_wtf.ValidationError("Invalid password")
class Login(MethodView):
def __init__(self):
self.form = LoginForm()
def get(self):
return flask.render_template('login.html', login_form=self.form)
def post(self):
if self.form.validate():
flask.session['user'] = self.form.email.data
flask.flash('You were logged in')
return flask.redirect(flask.url_for("index"))
return flask.render_template('login.html', login_form=self.form)
app.add_url_rule('/login',
view_func=Login.as_view('login'),
methods=['POST', 'GET'])
@ruipacheco
Copy link

Is this valid? The docs say it should be, for example, validate_email(form, field) not validate_email(self,field)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment