class F(Form): search = html5.SearchField() telephone = html5.TelField() url = html5.URLField() email = html5.EmailField() datetime = html5.DateTimeField() date = html5.DateField() dt_local = html5.DateTimeLocalField() integer = html5.IntegerField() decimal = html5.DecimalField() int_range = html5.IntegerRangeField() decimal_range = html5.DecimalRangeField()
class Formulario(flask_wtf.FlaskForm): """Pide el padrón y la dirección de correo. """ padron = fields.StringField( "Padrón", validators=[ validators.Regexp(r"\w+", message="Ingrese un padrón válido")]) email = html5.EmailField( "E-mail", validators=[ validators.Email(message="Ingrese una dirección de e-mail válida")]) submit = fields.SubmitField("Obtener enlace")
class RegisterForm(Form): username = simple.StringField( label='用户名', validators=[ validators.DataRequired(message='用户名不能为空'), validators.Length(min=3, max=18, message='用户名长度必须大于%(min)d, 并且小于%(max)d'), ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}) pwd = simple.PasswordField( label='用户密码', validators=[ validators.DataRequired(message='用户密码不能为空'), validators.Length(min=6, max=18, message='用户密码的长度必须大于6位字符并且小于18位字符'), validators.Regexp( regex='^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[_]){6,18}', message='用户密码至少包' '含一个字母一个数字以及一个下划线') ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}, ) re_pwd = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空'), validators.EqualTo('pwd', '两次密码输入不一致') ], widget=widgets.PasswordInput(), render_kw={'class': 'control'}, ) email = html5.EmailField( label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'}, ) def __init__(self, *args, **kwargs): super(RegisterForm, self).__init__(*args, **kwargs) def validate_pwd_confirm(self, field): if field.data != self.data['pwd']: # raise validators.ValidationError("密码不一致") 继续后续验证 raise validators.StopValidation('密码不一致') # 不再继续验证
class FormSignUp(Form): email = html5.EmailField(validators=[ validators.InputRequired(), validators.Email(message="Email is required") ]) password = fields.PasswordField(validators=[ validators.InputRequired(message="Password is required"), validators.EqualTo("password_confirmation", message="Passwords must match") ]) password_confirmation = fields.PasswordField(validators=[ validators.InputRequired(message="Password confirmation is required") ])
class RegisterForm(Form): name = simple.StringField( label='用户名', validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='alex' ) pwd = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空') ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) pwd_confirm = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空'), validators.EqualTo('pwd', message='两次密码输入不一致'), ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) email = html5.EmailField( label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'from-control'}, ) gender = core.RadioField( label='性别', choices=( (1, '男'), (2, '女'), ), coerce=int, default=[1, ], )
class RegistrationForm(Form): username = StringField( # Use of render keywords for html data found at # https://pythonpedia.com/en/knowledge-base/20440056/custom-attributes-for # -flask-wtforms "Username", validators=[InputRequired(), Length(max=20, min=4)], render_kw={ "class": "form-control", "aria-describedby": "usernameLabel", "minlength": "4", "maxlength": "20", "placeholder": "Enter username" }) password = PasswordField("Password", validators=[ InputRequired(), Length(min=10), EqualTo("confirm_password", message="Passwords must match") ], render_kw={ "class": "form-control", "aria-describedby": "passwordLabel", "minlength": "10", "placeholder": "Password" }) confirm_password = PasswordField("Repeat Password", validators=[InputRequired()], render_kw={ "class": "form-control", "aria-describedby": "confirmLabel", "placeholder": "Confirm Password" }) email = html5.EmailField( "Email", validators=[ InputRequired(), Email(message="This field requires a valid email") ], render_kw={ "class": "form-control", "aria-describedby": "emailLabel", "placeholder": "Email Address" }) agree = BooleanField("I agree to the terms and conditions of this site.", validators=[InputRequired()], render_kw={"class": "form-check-input"})
class ConfirmEmailForm(Form): email = html5.EmailField('email', validators=[validators.Required()]) random_code = fields.StringField('random_code', validators=[validators.Required()]) def validate_random_code(self, field): et = self.email_temp if not et: raise ValidationError('非法的验证请求') @locked_cached_property def email_temp(self): return (EmailTempModel.query.filter( EmailTempModel.email_insensitive == self.email.data).filter( EmailTempModel.random_code == self.random_code.data).first())
class InditeForm(FlaskForm): mail = html5.EmailField('E-mail Putting Please', validators=[Email(),Required()]) title = StringField('Artical title',validators=[Required()]) abstruct = TextAreaField('Artical in brief',validators=[Required()]) artical_file = FileField('Artical in PDF please',validators=[Required(), FileAllowed(['pdf'], 'PDF only!'),FileRequired()]) # subselect = SelectField(label='choose a subject',validators=[Required()],choices=[(1, 'test1'), (2, 'test2')],coerce=int) def query_subject(): return [r.name for r in db.session.query(Subject).all()] def query_theme(): return [r.name for r in db.session.query(Theme).all()] def get_pk(obj): return obj # theme = QuerySelectField(label=' theme select ',validators=[Required()],query_factory=query_factory,get_pk=get_pk) subselect = QuerySelectField(label='choose a subject',validators=[Required()],query_factory=query_subject,get_pk=get_pk) themeselect = QuerySelectMultipleField(label='choose themes u like PRESS CTRL + LEFT MOUSE to select many',query_factory=query_theme,get_pk=get_pk) submit = SubmitField('submit')
class LoginForm(RSAPasswordForm): email = html5.EmailField('邮箱', description='输入邮箱', validators=[validators.Required()]) def validate(self): super(LoginForm, self).validate() # noqa if not self.user: raise ValidationError('邮箱不存在') if self.user.password_hash != self.password_hash: raise ValidationError('密码错误') @locked_cached_property def user(self): email = self.email.data user = (UserModel.query.filter( UserModel.email_insensitive == email).first()) return user
class ApplicationForm(FlaskForm): #identity full_name = StringField('Full Name', validators=[validators.DataRequired()]) email = more_fields.EmailField('Email Address', validators=[validators.DataRequired(), validators.Email()]) # Requirements license = BooleanField('Licensed Driver') insurance = BooleanField('Insured') l_plate = StringField('License Plate') state = BooleanField('Registration State') consent = BooleanField('Parent/Guardian Written Consent') grade = SelectField(choices=[(9,'9th'), (10,'10th'), (11, '11th'), (12, '12th')]) # vehicle make = StringField('Vehicle Manufacturer') model = StringField('Model') year = StringField('Vehicle Year') # eligibility internship = BooleanField('Internship') d_enrollment = BooleanField('Dual Enrollment') service = BooleanField('Community Service') job = BooleanField('Weekday Work Hours') athletics_carpool = BooleanField('Team Carpool Host') athletics_captain = BooleanField('Athletic Captian') athletics = BooleanField('Seasonal Athlete') extracurricular = BooleanField('extracurricular Activities') sga = BooleanField('Student Government') media_production = BooleanField('Media Production') gpa = BooleanField('GPA Advantage') distance = BooleanField('Prohibitive Commute') weekday_job = BooleanField('weekday_job') attendance = BooleanField('Attendance Advantage') narrative = StringField('Explanation', widget=TextArea(), validators=[validators.DataRequired()]) timestamp = DateTimeField('',widget=HiddenInput()) submit = SubmitField('Submit')
class RegisterForm(Form): username = simple.StringField( validators=[validators.DataRequired(message='用户名不能为空.')], widget=widgets.TextInput(), ) password = simple.PasswordField( validators=[ validators.DataRequired(message='密码不能为空.'), validators.Length(min=8, message='密码长度必须大于%(min)d'), ], widget=widgets.PasswordInput(), ) email = html5.EmailField( label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), )
class CadastroCliente(FlaskForm): nome = StringField('Seu Nome', [InputRequired('Nome é Obrigatório')]) cidade = StringField('Sua Cidade', validators=[ InputRequired('Cidade é Obrigatório')]) cep = StringField('Seu Cep', validators=[InputRequired('Cep é Obritório')]) numero = html5.IntegerField('Número', widget=h5widgets.NumberInput( min=0), validators=[InputRequired('Número é Obrigatório')]) bairro = StringField('Seu Bairro', validators=[ InputRequired('Bairro é Obrigatório')]) rua = StringField('Sua rua', validators=[ InputRequired('Rua é Obrigatório')]) email = html5.EmailField( 'Seu e-mail', validators=[InputRequired('E-mail é Obrigatório')]) telefone = StringField('Seu telefone', validators=[ InputRequired('Telefone é Obrigatório')]) login = StringField('Seu Login', validators=[ InputRequired('Login é Obrigatório')]) password = PasswordField('Sua Senha', validators=[ InputRequired('Senha é Obrigatória')]) confirmPassword = PasswordField('Confirme a senha', validators=[ InputRequired('Confirmação é Obrigatório')]) receberEmail = BooleanField('Receber Email')
class UF(Form): email = wtforms_html5.EmailField('Email', default=user and user.email or None, validators=[ validators.DataRequired(), validators.Email(), _validate_user_does_not_exist( exclude=user and user.email or None)]) password1 = wtforms.PasswordField('New password', validators = [ not user and validators.Required() or validators.Optional(), validators.Length(min=10, message=lazy_gettext('Password should be at least 10 characters long.'))]) password2 = wtforms.PasswordField('Repeat password', validators = [ validators.EqualTo('password1', message=lazy_gettext("Passwords didn't match."))]) # Note: by default, a new user is active active = wtforms.BooleanField('Active',default=not user or user.active, validators=(user and user.id==current_user.id and \ [validate_checked(message=lazy_gettext("You can't deactivate yourself."))] or \ []))
class Edit_Form(FlaskForm): ''' Edit the new account for the employee ''' id = IntegerField("Id", validators=[DataRequired(), Length(1, 20)], render_kw={'readonly': True}) username = StringField('Username', validators=[DataRequired(), Length(1, 20)], render_kw={"placeholder": "User Name/ Work Number"}) password = StringField('Password', validators=[DataRequired(), Length(6, 20)], render_kw={"placeholder": "Password"}) email = html5.EmailField('Email', validators=[DataRequired(), Email()], render_kw={"placeholder": "Email Address"}) name = StringField('Full Name', validators=[DataRequired()], render_kw={"placeholder": "Name"}) # role = StringField('Role', validators=[DataRequired(), Length(1, 20)]) role = SelectField('Role', choices=[('1', 'Waiter'), ('2', 'Host'), ('3', 'Kitchen'), ('4', 'Busboy'), ('5', 'Manager')]) edit = SubmitField('Edit')
class RegisterForm(Form): username = simple.StringField( label='用户名', validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={'class': 'form-control', 'placeholder':'用户名'}, ) pwd = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.') ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control', 'placeholder':'密码'} ) pwd_confirm = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码输入不一致") ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control', 'placeholder':'确认密码'} ) email = html5.EmailField( label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control', 'placeholder':'邮箱'} )
class Add_Form(FlaskForm): ''' Creat the new account for the employee ''' username = StringField('Username', validators=[DataRequired(), Length(1, 20)], render_kw={"placeholder": "User Name/ Work Number"}) password = PasswordField('Password', validators=[DataRequired(), Length(6, 20)], render_kw={"placeholder": "Password"}) password1 = PasswordField( 'Confirm Password', validators=[DataRequired(), Length(6, 20), EqualTo('password')], render_kw={"placeholder": "Confirm Password"}) email = html5.EmailField('Email', validators=[DataRequired(), Email()], render_kw={"placeholder": "Email Address"}) name = StringField('Full Name', validators=[DataRequired()], render_kw={"placeholder": "Name"}) role = SelectField('Role', choices=[('1', 'Waiter'), ('2', 'Host'), ('3', 'Kitchen'), ('4', 'Busboy'), ('5', 'Manager')]) add_user = SubmitField('Add')
class RegisterForm(Form): name = simple.StringField(label='用户名', validators=[validators.DataRequired()], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='alex') pwd = simple.PasswordField( label='密码', validators=[validators.DataRequired(message='密码不能为空.')], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) pwd_confirm = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码输入不一致") ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) email = html5.EmailField(label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'}) gender = core.RadioField( label='性别', choices=( (1, '男'), (2, '女'), ), coerce=int # “1” “2” ) city = core.SelectField(label='城市', choices=( ('bj', '北京'), ('sh', '上海'), )) hobby = core.SelectMultipleField(label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int) favor = core.SelectMultipleField( label='喜好', choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[1, 2]) def __init__(self, *args, **kwargs): super(RegisterForm, self).__init__(*args, **kwargs) self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球')) def validate_pwd_confirm(self, field): """ 自定义pwd_confirm字段规则,例:与pwd字段是否一致 :param field: :return: """ # 最开始初始化时,self.data中已经有所有的值 if field.data != self.data['pwd']: # raise validators.ValidationError("密码不一致") # 继续后续验证 raise validators.StopValidation("密码不一致") # 不再继续后续验证
class RegisterForm(Form): name = simple.StringField( label='用户名', validators=[validators.DataRequired(message="用户名不能为空")], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='alex') pwd = simple.PasswordField( label='密码', validators=[validators.DataRequired(message='密码不能为空.')], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) pwd_confirm = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码输入不一致") # 校验密码一致 ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) email = html5.EmailField(label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'}) gender = core.RadioField( label='性别', choices=( (1, '男'), (2, '女'), ), coerce=int # int("1") 前端提交数据默认为字符串类型,coerce设置后端接收到后为int. ) city = core.SelectField(label='城市', choices=( ('bj', '北京'), ('sh', '上海'), )) hobby = core.SelectMultipleField(label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int) favor = core.SelectMultipleField( label='喜好', choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[ 1, ])
class RegisterForm(Form): name = simple.StringField(label="用户名", validators=[validators.DataRequired()], widget=widgets.TextInput(), render_kw={"class": "form-control"}, default="wd") pwd = simple.PasswordField( label="密码", validators=[validators.DataRequired(message="密码不能为空")]) pwd_confim = simple.PasswordField( label="重复密码", validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码不一致") ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) # ========================html5============================ email = html5.EmailField( # 注意这里用的是html5.EmailField label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'}) # ===================以下是用core来调用的======================= gender = core.RadioField( label="性别", choices=( (1, "男"), (1, "女"), ), coerce=int # 限制是int类型的 ) city = core.SelectField(label="城市", choices=( ("bj", "北京"), ("sh", "上海"), )) hobby = core.SelectMultipleField(label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int) favor = core.SelectMultipleField( label="喜好", choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[1, 2]) def __init__(self, *args, **kwargs): # 这里的self是一个RegisterForm对象 '''重写__init__方法''' super(RegisterForm, self).__init__(*args, **kwargs) # 继承父类的init方法 self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球') ) # 把RegisterForm这个类里面的favor重新赋值,实现动态改变复选框中的选项 def validate_pwd_confim( self, field, ): ''' 自定义pwd_config字段规则,例:与pwd字段是否一致 :param field: :return: ''' # 最开始初始化时,self.data中已经有所有的值 if field.data != self.data['pwd']: # raise validators.ValidationError("密码不一致") # 继续后续验证 raise validators.StopValidation("密码不一致") # 不再继续后续验证
class RegisterForm(FlaskForm): username = simple.StringField( label="用户名", validators=[ validators.DataRequired( message="用户名不能为空") # 必填项检查 message 为返回的错误内容 ], widget=widgets.TextInput(), render_kw={"class": "form-control"}, default="wd") password = simple.PasswordField( label="密码", validators=[ validators.DataRequired(message="密码不能为空"), validators.length(6, 10, message='密码长度为6~10位'), # Regexp(r'') # 写正则 ]) pwd_confim = simple.PasswordField( label="重复密码", validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('password', message="两次密码不一致") # 相等校验 ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'}) mail = html5.EmailField( # 注意这里用的是html5.EmailField label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'}) gender = core.RadioField( label="性别", choices=( (1, "男"), (1, "女"), ), coerce=int # 限制是int类型的 ) city = core.SelectField(label="城市", choices=( ("bj", "北京"), ("sh", "上海"), )) hobby = core.SelectMultipleField(label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int) favor = core.SelectMultipleField( label="喜好", choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[1, 2]) # submit = simple.SubmitField( # label="提交", # render_kw={ # "class": "btn btn-primary btn-block", # }, # ) def __init__(self, *args, **kwargs): # 动态更行字段的值(可以从数据库中查到数据并赋值) '''重写__init__方法''' super(RegisterForm, self).__init__(*args, **kwargs) self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球') ) # 把RegisterForm这个类里面的favor重新赋值,实现动态改变复选框中的选项
class RegistrationForm(FlaskForm): email = html5.EmailField('註冊電郵地址*:', validators=[DataRequired(), Email()]) username = StringField('會員名稱*:', validators=[DataRequired()]) gender = RadioField('性別*:', choices=[("Male", "男"), ("Female", "女")], default="Male", coerce=str) phoneNumber = StringField('聯絡電話:') year = SelectField(choices=[(0, '年份'), (2020, '2020'), (2019, '2019'), (2018, '2018'), (2017, '2017'), (2016, '2016'), (2015, '2015'), (2014, '2014'), (2013, '2013'), (2012, '2012'), (2011, '2011'), (2010, '2010'), (2009, '2009'), (2008, '2008'), (2007, '2007'), (2006, '2006'), (2005, '2005'), (2004, '2004'), (2003, '2003'), (2002, '2002'), (2001, '2001'), (2000, '2000'), (1999, '1999'), (1998, '1998'), (1997, '1997'), (1996, '1996'), (1995, '1995'), (1994, '1994'), (1993, '1993'), (1992, '1992'), (1991, '1991'), (1990, '1990'), (1989, '1989'), (1988, '1988'), (1987, '1987'), (1986, '1986'), (1985, '1985'), (1984, '1984'), (1983, '1983'), (1982, '1982'), (1981, '1981'), (1980, '1980'), (1979, '1979'), (1978, '1978'), (1977, '1977'), (1976, '1976'), (1975, '1975'), (1974, '1974'), (1973, '1973'), (1972, '1972'), (1971, '1971'), (1970, '1970'), (1969, '1969'), (1968, '1968'), (1967, '1967'), (1966, '1966'), (1965, '1965'), (1964, '1964'), (1963, '1963'), (1962, '1962'), (1961, '1961'), (1960, '1960'), (1959, '1959'), (1958, '1958'), (1957, '1957'), (1956, '1956'), (1955, '1955'), (1954, '1954'), (1953, '1953'), (1952, '1952'), (1951, '1951'), (1950, '1950'), (1949, '1949'), (1948, '1948'), (1947, '1947'), (1946, '1946'), (1945, '1945'), (1944, '1944'), (1943, '1943'), (1942, '1942'), (1941, '1941'), (1940, '1940'), (1939, '1939'), (1938, '1938'), (1937, '1937'), (1936, '1936'), (1935, '1935'), (1934, '1934'), (1933, '1933'), (1932, '1932'), (1931, '1931'), (1930, '1930'), (1929, '1929'), (1928, '1928'), (1927, '1927'), (1926, '1926'), (1925, '1925'), (1924, '1924'), (1923, '1923'), (1922, '1922'), (1921, '1921'), (1920, '1920')], coerce=int) month = SelectField(choices=[(0, '月份'), (1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5'), (6, '6'), (7, '7'), (8, '8'), (9, '9'), (10, '10'), (11, '11'), (12, '12')], coerce=int, default='', validators=[DataRequired()]) day = SelectField(choices=[(0, '日期'), (1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5'), (6, '6'), (7, '7'), (8, '8'), (9, '9'), (10, '10'), (11, '11'), (12, '12'), (13, '13'), (14, '14'), (15, '15'), (16, '16'), (17, '17'), (18, '18'), (19, '19'), (20, '20'), (21, '21'), (22, '22'), (23, '23'), (24, '24'), (25, '25'), (26, '26'), (27, '27'), (28, '28'), (29, '29'), (30, '30'), (31, '31')], coerce=int, default='', validators=[DataRequired()]) educationLevel = SelectField('教育程度:', choices=[('', '請選擇'), ('中四或以下', '中四或以下'), ('中五至中七或DSE', '中五至中七或DSE'), ('文憑或證書課程', '文憑或證書課程'), ('高級文憑或副學士', '高級文憑或副學士'), ('學士', '學士'), ('碩士或以上', '碩士或以上')], default='') income = SelectField('每月收入:', choices=[('', '請選擇'), ('$10,000 或以下', '$10,000 或以下'), ('$10,001 - $20,000', '$10,001 - $20,000'), ('$20,001 - $30,000', '$20,001 - $30,000'), ('$30,001 - $40,000', '$30,001 - $40,000'), ('$40,001 - $50,000', '$40,001 - $50,000'), ('$50,001 - $60,000', '$50,001 - $60,000'), ('$60,001 或以上', '$60,001 或以上')]) usergroup = SelectField(choices=[('admin', 'admin'), ('author', 'author'), ('normalUser', 'normalUser')], default='normalUser') password = PasswordField('設定密碼*:', validators=[DataRequired()]) password2 = PasswordField( '再輸入密碼*:', validators=[DataRequired(), EqualTo('password', message='確認密碼不一致')]) getinfo = BooleanField('本人同意收取香港經濟日報集團所發出的推廣資訊', default=True) submit = SubmitField('註冊') def validate_username(self, username): users = user.query.filter_by(username=username.data).first() if users is not None: raise ValidationError('用戶名稱已被使用') def validate_email(self, email): users = user.query.filter_by(email=email.data).first() if users is not None: raise ValidationError('電郵地址已被註冊')
class RegisterForm(Form): name = StringField( label='用户名', validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={'class': 'models-control'}, default='用户名' #设置input标签中默认值 ) pwd = PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.') ], widget=widgets.PasswordInput(), render_kw={'class': 'models-control'} ) pwd_confirm = PasswordField( #第二次输入密码 label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码输入不一致") #验证2次输入的密码是否一致? ], widget=widgets.PasswordInput(), render_kw={'class': 'models-control'} ) email = html5.EmailField( label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), #生成email input标签 render_kw={'class': 'models-control'} ) gender = core.RadioField( label='性别', choices=( #choice radio选项 (1, '男'), (2, '女'), ), coerce=int #讲用户提交过来的 '4' 强制转成 int 4 ) city = core.SelectField( label='城市', choices=( ('bj', '北京'), ('sh', '上海'), ) ) hobby = core.SelectMultipleField( #select 下拉框多选框 label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int ) favor = core.SelectMultipleField( label='喜好', choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), #生成Checkbox 多选框 option_widget=widgets.CheckboxInput(), coerce=int, default=[1,2] ) def __init__(self, *args, **kwargs): #重写form验证类的__init__方法可以实时同步数据中数据 super(RegisterForm, self).__init__(*args, **kwargs) self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球')) self.city.choices=(('bj', '北京'), ('sh', '上海'), ('tj','天津')) def validate_pwd_confirm(self, field): #wtforms验证 钩子函数 """ 自定义pwd_confirm字段规则,例:与pwd字段是否一致 :param field: :return: """ # 最开始初始化时,self.data中已经有所有的值 if field.data != self.data['pwd']: # raise validators.ValidationError("密码不一致") # 继续后续验证 raise validators.StopValidation("密码不一致") # 不再继续后续验证
class UploadForm(FlaskForm): email = html5.EmailField("email", [validators.InputRequired()]) audio_file = flask_wtf.file.FileField("Audio File", [flask_wtf.file.FileRequired])
class MailForm(FlaskForm): mail = html5.EmailField('E-mail Putting Please', validators=[Email(),Required()]) submit = SubmitField('submit')
class CommentForm(FlaskForm): mail = html5.EmailField('E-mail Putting Please', validators=[Email(),Required()]) comment = TextAreaField('comment in brief',validators=[Required()]) verify_code = StringField('VerifyCode', validators=[Required()]) submit = SubmitField('submit')
class RegisterForm(Form): name = simple.StringField( label='用户名', validators=[ validators.DataRequired() ], widget=widgets.TextInput(), render_kw={'class': 'form-control'}, default='alex' ) pwd = simple.PasswordField( label='密码', validators=[ validators.DataRequired(message='密码不能为空.') ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) pwd_confirm = simple.PasswordField( label='重复密码', validators=[ validators.DataRequired(message='重复密码不能为空.'), validators.EqualTo('pwd', message="两次密码输入不一致") ], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'} ) email = html5.EmailField( label='邮箱', validators=[ validators.DataRequired(message='邮箱不能为空.'), validators.Email(message='邮箱格式错误') ], widget=widgets.TextInput(input_type='email'), render_kw={'class': 'form-control'} ) gender = core.RadioField( label='性别', choices=( (1, '男'), (2, '女'), ), coerce=int ) city = core.SelectField( label='城市', choices=SQLHelper.fetch_all('select id,name from city',{},None), # choices=( # (1, '篮球'), # (2, '足球'), # ), coerce=int ) hobby = core.SelectMultipleField( label='爱好', choices=( (1, '篮球'), (2, '足球'), ), coerce=int ) favor = core.SelectMultipleField( label='喜好', choices=( (1, '篮球'), (2, '足球'), ), widget=widgets.ListWidget(prefix_label=False), option_widget=widgets.CheckboxInput(), coerce=int, default=[1, 2] ) def __init__(self, *args, **kwargs): super(RegisterForm, self).__init__(*args, **kwargs) self.city.choices = SQLHelper.fetch_all('select id,name from city',{},None) def validate_name(self, field): """ 自定义pwd_confirm字段规则,例:与pwd字段是否一致 :param field: :return: """ # 最开始初始化时,self.data中已经有所有的值 # print(field.data) # 当前name传过来的值 # print(self.data) # 当前传过来的所有的值:name,gender..... obj = SQLHelper.fetch_one('select id from users where name=%s',[field.data,]) if obj: raise validators.ValidationError("用户名已经存在") # 继续后续验证
class CreatePaypalPaymentForm(CreatePaymentForm): paypal_email = html5.EmailField('PayPal E-mail') submit = SubmitField('Pay Now')