File size: 4,607 Bytes
91073d4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SelectField, HiddenField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError, URL, Optional
from models import User, Category, Tag
class LoginForm(FlaskForm):
username = StringField('Username or Email', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
remember_me = BooleanField('Remember Me')
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=3, max=64)])
email = StringField('Email', validators=[DataRequired(), Email(), Length(max=120)])
password = PasswordField('Password', validators=[DataRequired(), Length(min=8, max=128)])
password2 = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user is not None:
raise ValidationError('This username is already taken. Please choose a different one.')
def validate_email(self, email):
user = User.query.filter_by(email=email.data).first()
if user is not None:
raise ValidationError('This email is already registered. Please use a different one.')
class EditProfileForm(FlaskForm):
avatar = FileField('Avatar', validators=[
FileAllowed(['jpg', 'png', 'jpeg', 'gif'], 'Images only!')
])
signature = StringField('Signature', validators=[Optional(), Length(max=200)])
location = StringField('Location', validators=[Optional(), Length(max=100)])
website = StringField('Website', validators=[Optional(), URL(), Length(max=120)])
bio = TextAreaField('About Me', validators=[Optional(), Length(max=500)])
class ChangePasswordForm(FlaskForm):
current_password = PasswordField('Current Password', validators=[DataRequired()])
password = PasswordField('New Password', validators=[DataRequired(), Length(min=8, max=128)])
password2 = PasswordField('Confirm New Password', validators=[DataRequired(), EqualTo('password')])
def validate_current_password(self, current_password):
# This will be checked in the route function using the current user
pass
class CreateTopicForm(FlaskForm):
title = StringField('Title', validators=[DataRequired(), Length(min=5, max=200)])
content = TextAreaField('Content', validators=[DataRequired(), Length(min=10)])
category_id = SelectField('Category', coerce=int, validators=[DataRequired()])
tags = StringField('Tags (comma separated)', validators=[Optional(), Length(max=100)])
def __init__(self, *args, **kwargs):
super(CreateTopicForm, self).__init__(*args, **kwargs)
# Populate category choices - this will be done in the route
class CreatePostForm(FlaskForm):
content = TextAreaField('Content', validators=[DataRequired(), Length(min=10)])
topic_id = HiddenField('Topic ID', validators=[DataRequired()])
class ReportForm(FlaskForm):
reason = TextAreaField('Reason', validators=[DataRequired(), Length(min=10, max=1000)])
post_id = HiddenField('Post ID', validators=[Optional()])
topic_id = HiddenField('Topic ID', validators=[Optional()])
class CreateCategoryForm(FlaskForm):
name = StringField('Name', validators=[DataRequired(), Length(min=3, max=100)])
description = TextAreaField('Description', validators=[Optional(), Length(max=500)])
order = StringField('Order', validators=[DataRequired()])
class EditCategoryForm(FlaskForm):
name = StringField('Name', validators=[DataRequired(), Length(min=3, max=100)])
description = TextAreaField('Description', validators=[Optional(), Length(max=500)])
order = StringField('Order', validators=[DataRequired()])
class EditUserForm(FlaskForm):
role = SelectField('Role', choices=[
('member', 'Member'),
('moderator', 'Moderator'),
('admin', 'Admin')
], validators=[DataRequired()])
is_active = BooleanField('Active')
is_banned = BooleanField('Banned')
ban_reason = TextAreaField('Ban Reason', validators=[Optional(), Length(max=500)])
class CreateTagForm(FlaskForm):
name = StringField('Name', validators=[DataRequired(), Length(min=2, max=50)])
def validate_name(self, name):
tag = Tag.query.filter_by(name=name.data.lower()).first()
if tag is not None:
raise ValidationError('This tag already exists.')
|