[英]I'm able to change a letter in “username” to a capital letter and register still with the same username. How do I fix this?
我的用戶帳戶包含[display_name,username,email,password]。 注冊人員時必須輸入這些憑據。 問題是如果用戶已經擁有'Juice'的用戶名,則另一個用戶可以使用用戶名'juice'注冊。 我怎么能阻止這個?
例如,即使用戶將字母更改為大寫,Twitter也不會讓用戶注冊相同的句柄。
我知道在數據庫中將某些事物設置為唯一但這對這個問題沒有幫助。 我會說實話,我迷路了! 這是我的第一個項目,即使它是通過(看看一切如何在一起)我一直在自己的東西旋轉。
# 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')
我希望我的應用程序不要讓一個人注冊用戶名。 對於前者 注冊用戶名'juice'如果用戶仍然可以使用相同的用戶名注冊,例如'Juice'
小豬退出@Shiot所說的話。 在驗證時將用戶名設置為小寫, 同時更新保存功能,該保存功能不在提供的代碼段中。
def validate_username(self, username):
user = User.query.filter_by(username=username.data.lower()).first()
如果您是在生產環境中,則創建一個名為display_name
的新字段,使該區分大小寫,將所有舊用戶名復制到此字段,然后將所有用戶名設置為小寫。
好名字順便說一句:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.