from wtforms import Form,StringField,IntegerField from wtforms import validators from wtforms.validators import Length,EqualTo,Email,InputRequired,NumberRange,\ Regexp,URL,UUID class RegisterForm(Form): username = StringField(validators=[Length(max=10,min=3,message='用戶名長度不正確')]) password = StringField(validators=[Length(max=10,min=3,message='密碼長度不正確')]) password_repeat = StringField(validators=[Length(max=10,min=3,message='密碼長度不正確'),EqualTo('password')]) class LoginForm(Form): # email = StringField(validators=[Email(message='郵箱格式不正確')]) # username = StringField(validators=[InputRequired(message='必須填寫用戶名')])#inputrequired必填字段 # age = IntegerField(validators=[NumberRange(12,100)])#驗證數字在某某區間以內 # phone = StringField(validators=[Regexp(r'1[85347]\d{9}',message='手機號碼格式不正確')]) # home_page = StringField(validators=[URL()])#必須驗證必須是一個跳轉連接 uuid = StringField(validators=[UUID()])#驗證uuid的
from flask import Flask,request,render_template from forms import RegisterForm,LoginForm app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/register/',methods=['get','post']) def register(): if request.method == 'GET': return render_template('register.html') else: # username = request.form.get('username') # password = request.form.get('password') # password_repeat = request.form.get('password_repeat') # if 3 > len(username) or len(username)> 10: # return '用戶名長度不正確' # if 3 > len(password) or len(password)> 10: # return '密碼長度不正確' # if password != password_repeat: # return '密碼輸入不一致' form = RegisterForm(request.form) if form.validate(): return 'success' else: print(form.errors)#{'username': ['用戶名長度不正確'], # 'password': ['密碼長度不正確'], 'password_repeat': ['密碼長度不正確']} #由於是字典,獲取方式我就不寫了 return 'fail' @app.route('/login/',methods=['get','post'])#若是methods沒有post方法,會報狀態碼405錯誤, # 靜態文件不容許請求post方法 def login(): if request.method == "GET": return render_template('login.html') else: login_form = LoginForm(request.form) if login_form.validate(): return 'success' else: return '{errors}'.format(errors=login_form.errors.get('phone')[0])#獲取具體錯誤信息 if __name__ == '__main__': app.run(debug=True)