簡體   English   中英

wtforms Flask Python 中的驗證器

[英]Validators in wtforms Flask Python

我嘗試在我的注冊頁面中將數字范圍添加到密碼,以確保我的密碼列中至少有一個數字,當我刪除數字范圍時,它工作正常,但如果我再次添加它,它會引發錯誤

from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField, BooleanField from wtforms.validators import DataRequired, length, Email, EqualTo, NumberRange

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(),
                            length(min=2, max=20)] )
    email = StringField('Email', validators=[DataRequired(),
                            Email(message="Please input a valid email address")])
    password = PasswordField('Password', validators=[DataRequired(),
                                length(min=5, max=12), NumberRange(min=1, max=3)])
    confirm_password = PasswordField('Confirm_Password',
                                    validators=[DataRequired(),
                                    EqualTo('password', message="Your password does not match")] )
    submit = SubmitField('SignUp')

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(),
                            Email()])
    password = PasswordField('Password', validators=[DataRequired() ])
    remember = BooleanField('Remember me')

    submit = SubmitField('Login')

這是我嘗試添加數字范圍時的錯誤

TypeError
TypeError: must be real number, not str

問題是NumberRange()只接受數字類型(整數、浮點數、雙精度等),但在傳遞字符串時總是會失敗。 這就是您的錯誤消息告訴您的內容,“輸入必須是實數,而不是字符串”。

解決方案:使用Regexp()

Regexp()將允許您將用戶的輸入與正則表達式進行比較。 您可以根據需要將其復雜化,但要解決“至少一位數”的當前要求,以下應該可行: Regexp('/d')

最后一點。 我注意到您使用的是DataRequired() ,WTForms 文檔建議改用InputRequired() ,除非在我沒有看到在這里應用的特定用例中。

參考資料: https ://wtforms.readthedocs.io/en/2.3.x/validators/

我遇到了這個問題,我將 NumberRange 更改為 Length .. 並且它起作用了'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM