首先我先試著再route裡直接加功能
@pages.route('/register', methods=['GET','POST'])
def regist():
if session.get('email'):
return redirect(url_for(".home"))
form = RegisterForm()
if form.validate_on_submit():
account = User(
_id=uuid.uuid4().hex,
email=form.email.data,
password=pbkdf2_sha256.hash(form.password.data)
)
current_app.db.account.insert_one(asdict(account))
flash('註冊完成',"success")
return redirect(url_for(".note"))
return render_template("register.html",title='註冊', form=form)
在forms.py裡建一個判斷式
class RegisterForm(FlaskForm):
email = StringField('email',validators=[InputRequired(message='請輸入email'),Email()])
password = PasswordField('password',validators=[InputRequired(message='請輸入密碼'),Length(min=8,message='你的密碼必須多於8位')])
confirm_password=PasswordField('confirm password',validators=[InputRequired(),equal_to("password",message='輸入的密碼不符合')])
submit = SubmitField('メモを追加')
def validate_email(form, field):
existing_account = current_app.db.account.find_one({'email': field.data})
if existing_account:
raise ValidationError('An account already exists with that email address.')
return redirect 回註冊頁面時不知道該怎給予提示,有考慮用flash但字應該會留著不會消失,但如果要做成整合在html的confirm目前沒有找到合適的解決
待補充.....
目前有效的解決方式是,在創的Registerform裡直接定義一個功能出來
這樣叫上面的方法省了route的程式數量,也節省一些查找及覆蓋一些定義值的問題。
@pages.route('/register', methods=['GET','POST'])
def regist():
if session.get('email'):
return redirect(url_for(".home"))
form = RegisterForm()
if form.validate_on_submit():
account = User(
_id=uuid.uuid4().hex,
email=form.email.data,
password=pbkdf2_sha256.hash(form.password.data)
)
current_app.db.account.insert_one(asdict(account))
flash('註冊完成',"success")
return redirect(url_for(".note"))
return render_template("register.html",title='註冊', form=form)
Visit the link for more information:
References