Man*_*lue 4 python database sqlalchemy flask
我正在使用 Flask+Python 并检查用户名(和电子邮件)是否已被占用,我正在使用以下逻辑:
@app.route('/register', methods=['GET', 'POST'])
def register():
form = SignupForm()
if form.validate_on_submit():
user = Users.query.filter_by(username=form.username.data).first()
email = Users.query.filter_by(email=form.email.data).first()
if form.username.data in user:
error = 'Username already taken. Choose another'
elif form.email.data in email:
error = 'Email already registered. Login or register with another Email'
else:
user = Users(
form.username.data,
form.password.data,
#form.confirm.data ,
form.email.data,
1,
# form.cityaddress.data,
# form.countryaddress.data,
#form.accept_tos.data,
)
db.session.add(user)
db.session.commit()
return redirect(url_for('index'))
Run Code Online (Sandbox Code Playgroud)
但它给出的错误就像object has no attribute 'username'
我知道我从数据库获取数据的逻辑不正确。我对 SQLalchemy 知之甚少。
你能建议我如何从表中获取Username(和Email)列值Users,然后检查它们是否相同form.username.data?
您的查询看起来很好,返回值first()将是您的 User 对象的实例,或者None如果没有结果:
u = Users.query.filter_by(username=form.username.data).first()
if u is not None:
print u.username
print u.email
Run Code Online (Sandbox Code Playgroud)
鉴于此,您的逻辑可能如下所示:
user_by_name = Users.query.filter_by(username=form.username.data).first()
user_by_email = Users.query.filter_by(email=form.email.data).first()
if user_by_name:
error = 'Username already taken. Choose another'
elif user_by_email:
error = 'Email already registered. Login or register with another Email'
else:
#Unique user and email
Run Code Online (Sandbox Code Playgroud)
您也可以在一个查询中完成此操作:
existing = Users.query.filter((Users.username == form.username.data) | (Users.email == form.email.data)).all()
if existing:
error = 'User or email taken'
Run Code Online (Sandbox Code Playgroud)
请注意使用filternot filter_by- 您不能在 中使用按位运算符filter_by。这是一个快速工作示例