Source code for app.views.forms

"""
app.views.forms
===============

All classes derived from ``FlaskForm`` imported from ``Flask-WTF``.
``Flask-WTF`` is a ``Flask`` extension built on top of ``WTForms``.
"""

from flask import current_app
from flask_babel import lazy_gettext as _l
from flask_pagedown.fields import PageDownField
from flask_wtf import FlaskForm
from wtforms import (
    BooleanField,
    FileField,
    PasswordField,
    StringField,
    SubmitField,
    TextAreaField,
)
from wtforms.validators import (
    DataRequired,
    Email,
    EqualTo,
    Length,
    ValidationError,
)

from app.models import User


[docs] class RegistrationForm(FlaskForm): """Form for registering a new user.""" username = StringField( _l("Username"), validators=[DataRequired(), Length(max=64)] ) email = StringField( _l("Email"), validators=[DataRequired(), Email(), Length(max=120)] ) password = PasswordField(_l("Password"), validators=[DataRequired()]) confirm_password = PasswordField( _l("Confirm Password"), validators=[DataRequired(), EqualTo("password")], ) submit = SubmitField(_l("Register")) # noinspection PyMethodMayBeStatic
[docs] def validate_username(self, username: StringField) -> None: """WTForms validates methods prefixed with ``validate_``. :param username: Username to check validity for. :raises ValidationError: if username already exists. """ user = User.query.filter_by(username=username.data).first() reserved = username.data in current_app.config["RESERVED_USERNAMES"] if user is not None or reserved: raise ValidationError(_l("Username is taken"))
# noinspection PyMethodMayBeStatic
[docs] def validate_email(self, email: StringField) -> None: """WTForms validates methods prefixed with ``validate_``. :param email: Email to check validity for. :raises ValidationError: if user with email already exists. """ user = User.query.filter_by(email=email.data).first() if user is not None: raise ValidationError( _l("A user with this email address is already registered") )
[docs] class LoginForm(FlaskForm): """Form for logging in an existing user.""" username = StringField(_l("Username"), validators=[DataRequired()]) password = PasswordField(_l("Password"), validators=[DataRequired()]) remember_me = BooleanField(_l("Remember Me")) submit = SubmitField(_l("Sign In"))
[docs] class PostForm(FlaskForm): """Form for creating new ``Post`` objects.""" title = StringField(_l("Title"), validators=[DataRequired()]) body = PageDownField( _l("Body"), validators=[DataRequired()], render_kw={"rows": 12} ) submit = SubmitField(_l("Submit"))
[docs] class UploadForm(FlaskForm): """For for uploading files.""" file = FileField(_l("File")) submit = SubmitField(_l("Submit"))
[docs] class ResetPasswordRequestForm(FlaskForm): """Form for requesting a reset email for an existing user.""" email = StringField(_l("Email"), validators=[DataRequired(), Email()]) submit = SubmitField(_l("Request Password Reset"))
[docs] class ResetPasswordForm(FlaskForm): """Form for resetting an existing user's password.""" password = PasswordField(_l("Password"), validators=[DataRequired()]) confirm_password = PasswordField( _l("Confirm Password"), validators=[DataRequired(), EqualTo(_l("password"))], ) submit = SubmitField(_l("Reset Password"))
[docs] class EditProfile(FlaskForm): """Form for editing an existing user's profile page.""" username = StringField(_l("username"), validators=[DataRequired()]) about_me = TextAreaField( _l("About me"), validators=[Length(min=0, max=140)] ) submit = SubmitField(_l("Submit"))
[docs] class EmptyForm(FlaskForm): """Empty form: Submit only.""" submit = SubmitField(_l("Submit"))
[docs] class MessageForm(FlaskForm): """Form for creating new ``Message`` objects.""" message = TextAreaField( _l("Message"), validators=[DataRequired(), Length(min=0, max=140)] ) submit = SubmitField(_l("Submit"))