由于管理员需要的表单较多,所以创建forms目录,用以编辑多个表单文件。
在app/admin/forms/admin.py
中:
from wtforms.validators import EqualTo
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, PasswordField, SelectField
from wtforms.validators import DataRequired
from app.models import Role
class BaseForm(FlaskForm):
name = StringField(
label='管理员名称',
validators=[
DataRequired('请输入管理员名称!')
],
)
pwd = PasswordField(
label='管理员密码',
validators=[
DataRequired('请输入管理员密码!')
],
)
repwd = PasswordField(
label='管理员确认密码',
validators=[
DataRequired('请输入管理员确认密码!'),
EqualTo('pwd', message='两次密码不一致')
],
)
is_super = SelectField(
label='是否超级管理员',
description='默认为普通管理员',
coerce=int,
choices=[(0, '普通管理员'), (1, '超级管理员')],
)
role_id = SelectField(
label='所属角色',
validators=[
DataRequired('请选择所属角色!')
],
coerce=int,
# choices=[(role.id, role.name) for role in Role.query.all()],
description='所属角色',
)
def __init__(self, *args, **kwargs):
super(BaseForm, self).__init__(*args, **kwargs)
self.role_id.choices = [(v.id, v.name) for v in Role.query.all()]
class AdminForm(BaseForm):
submit = SubmitField(
label='添加管理员',
)
class EditAdminForm(BaseForm):
submit = SubmitField(
label='编辑管理员',
)
在app/admin/forms/auth.py
中:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
class BaseForm(FlaskForm):
name = StringField(
label='权限名称',
validators=[
DataRequired('请输入权限名称!')
],
)
url = StringField(
label='访问链接',
validators=[
DataRequired('请输入访问链接!')
],
)
class AuthForm(BaseForm):
submit = SubmitField(
label='添加权限',
)
class EditAuthForm(BaseForm):
submit = SubmitField(
label='更新权限',
)
在app/admin/forms/main.py
中:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired
class BaseForm(FlaskForm):
username = StringField(
label="用户名",
validators=[
DataRequired()
]
)
password = PasswordField(
label="密码",
validators=[
DataRequired(),
# Length(6, 12, message="密码长度必须为6-12")
]
)
class LoginForm(BaseForm):
submit = SubmitField(
label="登录"
)
class PwdForm(FlaskForm):
old_pwd = PasswordField(
label="旧密码",
validators=[
DataRequired()
],
# <input name="xxx" placeholder="">
render_kw={
'placeholder': "请输入旧密码"
}
)
new_pwd = PasswordField(
label="新密码",
validators=[
DataRequired()
],
render_kw={
'placeholder': "请输入新密码"
}
)
submit = SubmitField(
label="修改密码"
)
在app/admin/forms/movie.py
中:
from flask_wtf import FlaskForm
from flask_wtf.file import FileAllowed
from wtforms import StringField, FileField, TextAreaField, SelectField, DateTimeField, SubmitField
from wtforms.validators import DataRequired
from app.models import Tag
class BaseForm(FlaskForm):
name = StringField(
label="电影名",
validators=[
DataRequired()
]
)
url = FileField(
label="电影文件",
validators=[
FileAllowed(['mp4', 'avi'], message="文件格式不正确. 只能接收mp4和avi格式")
]
)
info = TextAreaField(
label="电影简介"
)
logo = FileField(
label="电影封面",
validators=[
FileAllowed(['png', 'jpg'], message="文件格式不正确.")
]
)
star = SelectField(
label="电影星级",
coerce=int,
choices=[(i + 1, "%s星" % (i + 1)) for i in range(5)]
)
tag_id = SelectField(
label="电影标签",
coerce=int,
# choices=[(tag.id, tag.name) for tag in Tag.query.all()]
)
area = StringField(
label="上映地区"
)
length = StringField(
label="电影时长"
)
release_time = DateTimeField(
label="上映时间"
)
def __init__(self, *args, **kwargs):
super(BaseForm, self).__init__(*args, **kwargs)
# 当每次实例化表单时, 都重新查询标签的内容,
self.tag_id.choices = [(tag.id, tag.name) for tag in Tag.query.all()]
class MovieForm(BaseForm):
submit = SubmitField(
label="添加电影"
)
class EditMovieForm(BaseForm):
submit = SubmitField(
label="编辑电影"
)
在app/admin/forms/preview.py
中:
from flask_wtf import FlaskForm
from wtforms import StringField, FileField, SubmitField
from wtforms.validators import DataRequired
class BaseForm(FlaskForm):
name = StringField(
label='预告标题',
validators=[
DataRequired('请输入预告标题!')
],
)
logo = FileField(
label='预告封面',
validators=[
DataRequired('请上传预告封面!')
],
)
class PreviewForm(BaseForm):
submit = SubmitField(
label='添加预告',
)
class EditPreviewForm(BaseForm):
submit = SubmitField(
label='编辑预告',
)
在app/admin/forms/role.py
中:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, SelectMultipleField
from wtforms.validators import DataRequired
from app.models import Auth
class BaseForm(FlaskForm):
name = StringField(
label='角色名称',
validators=[
DataRequired('请输入角色名称!')
],
)
auths = SelectMultipleField(
label='权限列表',
description='请选择权限列表!(可多选)',
coerce=int,
# choices=[(item.id, item.name) for item in Auth.query.all()]
)
def __init__(self, *args, **kwargs):
super(BaseForm, self).__init__(*args, **kwargs)
self.auths.choices = [(item.id, item.name) for item in Auth.query.all()]
class RoleForm(BaseForm):
submit = SubmitField(
label='添加角色',
)
class EditRoleForm(BaseForm):
submit = SubmitField(
label='编辑角色',
)
在app/admin/forms/tag.py
中:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
class BaseForm(FlaskForm):
name = StringField(
label="标签名",
validators=[
DataRequired()
]
)
class TagForm(BaseForm):
submit = SubmitField(
label="添加标签"
)
class EditTagForm(BaseForm):
submit = SubmitField(
label="编辑标签"
)