用戶登錄


from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import core from wtforms.fields import html5 from wtforms.fields import simple from wtforms import validators from wtforms import widgetsapp = Flask(__name__, template_folder='templates')class LoginForm(Form):name = simple.StringField(label='用戶名',validators=[validators.DataRequired(message='用戶名不能為空.'),validators.Length(min=6, 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=8, message='用戶名長度必須大于%(min)d'),validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}",message='密碼至少8個字符,至少1個大寫字母,1個小寫字母,1個數字和1個特殊字符')],widget=widgets.PasswordInput(),render_kw={'class': 'form-control'})@app.route('/login', methods=['GET', 'POST']) def login():if request.method == 'GET':form = LoginForm()return render_template('login.html', form=form)else:form = LoginForm(formdata=request.form)if form.validate():print('用戶提交數據通過格式驗證,提交的值為:', form.data)else:print(form.errors)return render_template('login.html', form=form)if __name__ == '__main__':app.run(host="127.0.0.1", port=8000)login.py


<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h1>登錄</h1> <form method="post"><!--<input type="text" name="name">--><p>{{form.name.label}} {{form.name}} {{form.name.errors[0] }}</p><!--<input type="password" name="pwd">--><p>{{form.pwd.label}} {{form.pwd}} {{form.pwd.errors[0] }}</p><input type="submit" value="提交"> </form> </body> </html>
?
用戶注冊


from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import core from wtforms.fields import html5 from wtforms.fields import simple from wtforms import validators from wtforms import widgetsapp = Flask(__name__, template_folder='templates') app.debug = Trueclass 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=(('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("密碼不一致") # 不再繼續后續驗證 @app.route('/register', methods=['GET', 'POST']) def register():if request.method == 'GET':form = RegisterForm(data={'gender': 1})return render_template('register.html', form=form)else:form = RegisterForm(formdata=request.form)if form.validate():print('用戶提交數據通過格式驗證,提交的值為:', form.data)else:print(form.errors)return render_template('register.html', form=form)if __name__ == '__main__':app.run()


<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h1>用戶注冊</h1> <form method="post" novalidate style="padding:0 50px">{% for item in form %}<p>{{item.label}}: {{item}} {{item.errors[0] }}</p>{% endfor %}<input type="submit" value="提交"> </form> </body> </html>
?