Я пытаюсь реализовать некоторые базовые c требования к паролю для моего Flask веб-приложения, но я заметил, что моя веб-страница не выдает ошибку, когда я пытаюсь создать учетную запись, даже если она должна работать.
Для пользователя мне нужно, чтобы оно было минимум 8 символов, alphanumeri c и имело как минимум 1 специальный символ. У меня есть этот код в моем forms.py
class customer_registration(FlaskForm):
username = StringField("Username:", validators=[validators.Length(min=3, max=20), DataRequired()])
email = StringField("Email:", validators=[validators.Length(min=6, max=60), DataRequired()])
password = PasswordField("Password:", validators=[validators.Regexp(r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$', message='Password must contain 1 letter, 1 number and 1 special character.'), validators.Length(min=8, max=20), DataRequired(), validators.EqualTo('cfm_password', message='Password must match')])
cfm_password = PasswordField("Confirm Password:", validators=[validators.Length(min=8, max=20), DataRequired()])
submit = SubmitField()
Для администратора мне нужно, чтобы он был минимум 8 символов, иметь 1 верхний регистр, 1 нижний регистр, 1 цифру и иметь 1 специальный символ. У меня есть этот код в моем forms.py.
class create_admin_account(FlaskForm):
username = StringField("Username:", validators=[validators.Length(min=3, max=12), DataRequired()])
password = PasswordField("Password:", validators=[validators.Regexp(r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$', message='Password must contain 1 upper case, 1 lower case, 1 number and 1 special character.'), validators.Length(min=8, max=16),DataRequired(), validators.EqualTo('cfm_password', message='Passwords must match')])
cfm_password = PasswordField("Confirm Password:", validators=[validators.Length(min=8, max=16),DataRequired()])
submit = SubmitField()
В моих init .py (пользователь) и admin_url.py (администратор), вот что у меня есть для пользователя и администратора создание.
@app.route('/register', methods=['GET', 'POST'])
def register():
form = customer_registration()
if(logincontroller.find_user_username(form.username.data)):
flash("Username exists, please choose another.", "error")
if request.method == 'POST' and form.validate():
flag = logincontroller.create_user_account(form.username.data, form.password.data, form.email.data)
if(flag):
flash("You have registered, please login", "success")
return redirect(url_for('login'))
else:
flash("you have failed to register, something went wrong, try again", "error")
return render_template('register.html', form=form)
и
@admin_pages.route('/admin/accounts/admin/create', methods=['GET', 'POST'])
@authorize
def create_admin_accounts():
context = {}
form = create_admin_account()
if request.method == 'POST' and form.validate():
success_flag = logincontroller.create_admin_account(form.username.data, form.password.data)
if (not success_flag):
flash("Error, you cannot create an account", "error")
else:
flash("Admin account created.", "success")
form = create_admin_account()
return render_template('admin/accounts/create_admin_accounts.html', form=form, message=context)
Исходя из моего понимания, я правильно выполнил выражение регулярного выражения, поскольку оно должно быть
r '^ ( ? =. [A-Za-Z]) (? =. \ d) (? =. [@ $!% #? &]) [A-Za-г \ d @ $!% * #? &] {8,} $ '
для пользователя и
r' ^ (? =. [ аз]) (? =. [AZ]) (? =. \ d) (? =. [@ $!% ? &]) [A-Za-г \ d @ $!% ? &] {8,} $ '
для администратора.
Не могу понять, что пошло не так в пути , До того, как я добавил валидаторы регулярных выражений, все работало гладко. Заранее спасибо за помощь!