From c7d3b5c3e878700591202668fd96d060e6e98550 Mon Sep 17 00:00:00 2001 From: Kyle Roux Date: Fri, 19 May 2017 13:37:22 -0700 Subject: [PATCH 1/3] added stuff to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 44dbbcd..89d8f01 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ database.sqlite +*.pyc +.env \ No newline at end of file From 76c77a6b127da65e6ccf173f2d39c156e162a93e Mon Sep 17 00:00:00 2001 From: Kyle Roux Date: Fri, 19 May 2017 17:50:09 -0700 Subject: [PATCH 2/3] additions for base fields --- forms.py | 106 +++++++++++++++++++++++++------------------------------ 1 file changed, 48 insertions(+), 58 deletions(-) diff --git a/forms.py b/forms.py index f09107e..5e15b18 100644 --- a/forms.py +++ b/forms.py @@ -1,28 +1,49 @@ from flask_wtf import FlaskForm -from wtforms import StringField, PasswordField, BooleanField +from wtforms import StringField, PasswordField, BooleanField, Form from wtforms.validators import DataRequired, Email, Length, EqualTo - -class LoginForm(FlaskForm): - ''' - Form Login - ''' +class EmailFieldMixin(Form): + """ + mixin class to provide email field to forms + """ email = StringField( 'Email', validators=[ DataRequired(), Email() - ] - ) + ] + ) + +class PasswordFieldMixin(Form): + """ + mixin class to provide password field + """ + def __init__(self, *args, **kwargs): + super(PasswordFieldMixin, self).__init__(*args, **kwargs) + password_field = self._fields.pop('password') + self._fields['password'] = password_field + if 'password_confirm' in self._fields: + self._fields['password'].validators.append( + EqualTo( + 'password_confirm', + 'Passwords are not the same.' + ) + ) + confirm_password_field = self._fields.pop('password_confirm') + self._fields['password_confirm'] = confirm_password_field password = PasswordField( 'Password', validators=[ DataRequired() - ] - ) + ] + ) - -class SignupForm(FlaskForm): +class LoginForm(FlaskForm, EmailFieldMixin, PasswordFieldMixin): + ''' + Form Login + ''' + +class SignupForm(FlaskForm, EmailFieldMixin, PasswordFieldMixin): ''' Form signup ''' @@ -30,63 +51,32 @@ class SignupForm(FlaskForm): 'Username', validators=[ DataRequired(), - Length(5, 30, ''' - You can not have less than 5 characters or more 30. - ''') - ] - ) - email = StringField( - 'Email', - validators=[ - DataRequired(), - Email(), - Length(1, 254, 'Too long.') - ] - ) - password = PasswordField( - 'Password', - validators=[ - DataRequired(), - EqualTo( - 'password_confirm', - 'Passwords are not the same.' - ) - ] - ) + Length( + 5, # min + 30, # max + 'You can not have less than 5 characters or more 30.' # error message + ) + ] + ) password_confirm = PasswordField('Repeat password') accept_tos = BooleanField( 'I accept the terms and conditions.', validators=[ DataRequired('Please accept the terms and conditions.') - ] - ) + ] + ) + def __init__(self, *args, **kwargs): + super(SignupForm, self).__init__(*args, **kwargs) + tos = self._fields.pop('accept_tos') + self._fields['accept_tos'] = tos - -class EmailResetPasswordForm(FlaskForm): +class EmailResetPasswordForm(FlaskForm, EmailFieldMixin): ''' Form send email reset password ''' - email = StringField( - 'Email', - validators=[ - DataRequired(), - Email() - ] - ) - class ResetPasswordForm(FlaskForm): ''' Form update password - ''' - password = PasswordField( - 'Password', - validators=[ - DataRequired(), - EqualTo( - 'password_confirm', - 'Passwords are not the same.' - ) - ] - ) + ''' password_confirm = PasswordField('Repeat password') From 9525da85acb856be1d4957a5ff9560ba969768d0 Mon Sep 17 00:00:00 2001 From: "Kyle J. Roux" Date: Fri, 19 May 2017 22:19:25 -0700 Subject: [PATCH 3/3] Update forms.py to finish field mixin refactoring, and add missing email validator --- forms.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/forms.py b/forms.py index 5e15b18..98db7f7 100644 --- a/forms.py +++ b/forms.py @@ -10,10 +10,18 @@ class EmailFieldMixin(Form): 'Email', validators=[ DataRequired(), - Email() + Email(), + Length(1, 254, 'Too long.'), ] ) +class PasswordConfirmFieldMixin(Form): + """ + mixin class to provide extra password field + + """ + password_confirm = PasswordField('Repeat password') + class PasswordFieldMixin(Form): """ mixin class to provide password field @@ -43,7 +51,7 @@ class LoginForm(FlaskForm, EmailFieldMixin, PasswordFieldMixin): Form Login ''' -class SignupForm(FlaskForm, EmailFieldMixin, PasswordFieldMixin): +class SignupForm(FlaskForm, EmailFieldMixin, PasswordConfirmFieldMixin, PasswordFieldMixin): ''' Form signup ''' @@ -58,7 +66,6 @@ class SignupForm(FlaskForm, EmailFieldMixin, PasswordFieldMixin): ) ] ) - password_confirm = PasswordField('Repeat password') accept_tos = BooleanField( 'I accept the terms and conditions.', validators=[ @@ -75,8 +82,8 @@ class EmailResetPasswordForm(FlaskForm, EmailFieldMixin): Form send email reset password ''' -class ResetPasswordForm(FlaskForm): +class ResetPasswordForm(FlaskForm,PasswordConfirmFieldMixin): ''' Form update password ''' - password_confirm = PasswordField('Repeat password') +