У меня есть учетные записи, состоящие из [display_name, username, email, password]. При регистрации человеку необходимо будет ввести эти учетные данные. Проблема в том, что если у пользователя уже есть имя пользователя «Сок», другой пользователь может зарегистрироваться под именем пользователя «сок». Как я могу предотвратить это?
Например, твиттер не разрешит пользователям регистрироваться с тем же дескриптором, даже если они поменяют букву на заглавную.
У меня есть это, где определенные вещи установлены в базе данных уникальными, но это не помогает этой проблеме. Я буду честен, я потерян! Это мой первый проект, несмотря на то, что он проходит (чтобы увидеть, как все идет вместе), я делаю свой собственный ход вещей.
# models.py for user
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
display_name = db.Column(db.String(20), nullable=False)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
image_file = db.Column(db.String(20), nullable=False,
default='default.jpg')
password = db.Column(db.String(30), nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)
# what a user looks like
def __repr__(self):
return f"User('{self.display_name}', '{self.username}',
'{self.email}', '{self.image_file}')"
# forms.py for RegistrationForm
class RegistrationForm(FlaskForm):
display_name = StringField('Display Name', validators=
[DataRequired(),
Length(min=2, max=20)])
username = StringField('Username', validators=[DataRequired(),
Length(min=4, max=20)])
email = StringField('Email', validators=[DataRequired(),
Email()])
password = PasswordField('Password', validators=[DataRequired(),
Length(min=6, max=30)])
confirm_password = PasswordField('Confirm Password', validators=
[DataRequired(), EqualTo('password')])
submit = SubmitField('Sign Up')
# stops same user credentials from signing up
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user:
raise ValidationError('That username is taken. Please choose
another one')
def validate_email(self, email):
user = User.query.filter_by(email=email.data).first()
if user:
raise ValidationError('That email address is taken. Please
choose another one')
Я хочу, чтобы мое приложение не позволяло человеку регистрироваться под именем пользователя, подобным другому.
Например
зарегистрированное имя пользователя "сок"
пользователь по-прежнему может зарегистрироваться под тем же именем пользователя, если они пишут с заглавной буквы, например, «Сок»