app/admin/forms.py
from flask_wtf import FlaskForm
from wtforms import ValidationError
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from wtforms.fields import (
PasswordField,
StringField,
SubmitField,
)
from wtforms.fields.html5 import EmailField
from wtforms.validators import (
Email,
EqualTo,
InputRequired,
Length,
)
from app import db
from app.models import Role, User
class ChangeUserEmailForm(FlaskForm):
email = EmailField(
'New email', validators=[InputRequired(),
Length(1, 64),
Email()])
submit = SubmitField('Update email')
def validate_email(self, field):
if User.query.filter_by(email=field.data).first():
raise ValidationError('Email already registered.')
class ChangeAccountTypeForm(FlaskForm):
role = QuerySelectField(
'New account type',
validators=[InputRequired()],
get_label='name',
query_factory=lambda: db.session.query(Role).order_by('permissions'))
submit = SubmitField('Update role')
class InviteUserForm(FlaskForm):
role = QuerySelectField(
'Account type',
validators=[InputRequired()],
get_label='name',
query_factory=lambda: db.session.query(Role).order_by('permissions'))
first_name = StringField(
'First name', validators=[InputRequired(),
Length(1, 64)])
last_name = StringField(
'Last name', validators=[InputRequired(),
Length(1, 64)])
email = EmailField(
'Email', validators=[InputRequired(),
Length(1, 64),
Email()])
submit = SubmitField('Invite')
def validate_email(self, field):
if User.query.filter_by(email=field.data).first():
raise ValidationError('Email already registered.')
class NewUserForm(InviteUserForm):
password = PasswordField(
'Password',
validators=[
InputRequired(),
EqualTo('password2', 'Passwords must match.')
])
password2 = PasswordField('Confirm password', validators=[InputRequired()])
submit = SubmitField('Create')