register跟login以及重複帳號報錯

筆記種類
flask

 

首先我先試著再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