- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有用户登录系统的 flask 应用程序。我现在注意到一些与用于注册和登录网站的电子邮件地址区分大小写相关的问题。 TL;DR 问题:我如何使用 Flask 表单的小写字母并使用它来评估用户是否存在于我的数据库中?
例子
假设用户 John Smith 在网站上注册了一个帐户。他使用 John.Smith@gmail.com 注册,但随后使用 John.smith@gmail.com 登录。截至目前,该网站会将他们视为两个不同的用户。我希望这被视为同一用户。
在 Python(我的强项)中,我会选择 str(form.email.data).lower()
用于注册表,然后将其写入数据库中的用户表。然后当有人尝试登录时我会做同样的事情。换句话说,我总是考虑小写的注册和登录。
但是我正在努力在 Jinja 中实现它,尽管它与 Python 相似。
register.html 的电子邮件部分:
<div class="form-group">
{{ form.email.label(class="form-control-label") }}
{% if form.email.errors %}
{{ form.email(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.email.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.email(class="form-control form-control-lg") }}
{% endif %}
</div>
@app.route("/register", methods=['GET', 'POST'])
def register():
if current_user.is_authenticated:
return redirect(url_for('home'))
form = RegistrationForm()
admins = ['admin@admin.com',
'admin@admin.com']
if form.validate_on_submit():
new_user_email = form.email.data.lower() ###<-----NOTE THAT THIS IS LOWER CASE
admin_test = True if new_user_email in admins else False
invited_test = Invites.query.filter(Invites.invited_email == new_user_email).count()
print(admin_test, invited_test)
if (invited_test == 0) & (admin_test == False): # Not invited and not and admin --> REJECT
flash(
'Sorry but it looks like you were not invited. Please contact a current member for an invitation.',
'warning')
elif (invited_test > 0) | (admin_test == True): ## if they have been invited OR if they are admin
hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
#create User object
user = User(username=form.username.data.lower(), ###<----NOTE LOWER CASE
email=form.email.data.lower(), ###<----NOTE LOWER CASE
password=hashed_password)
#write to db
db.session.add(user)
db.session.commit()
#alert user
flash('Welcome to. Enjoy the platform.', 'success')
return redirect(url_for('login'))
else:
#Not invited condition
flash('Sorry but it looks like you were not invited to __. Please contact a current member for an invitation.', 'warning')
return render_template('register.html', title='Register', form=form)
<div class="form-group">
{{ form.email.label(class="form-control-label") }}
{% if form.email.errors %}
{{ form.email(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.email.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.email(class="form-control form-control-lg") }}
{% endif %}
</div>
最佳答案
你在这里似乎走在正确的道路上。可以帮助您区分大小写的两件事:
Jinja2
您可以通过过滤器 lower
或 upper
到模板(请注意,您也可以注册自定义过滤器并在 jinja2
上使用它)。
#lower
{% user.email|lower %}
#upper
{% user.email|upper %}
==
进行直接比较,您可以通过
ilike
,使其本质上是不区分大小写的比较:
Invites.query.filter(Invites.invited_email.ilike(new_user_email)).count()
关于Flask-wtform 大小写敏感问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57262214/
我这里有一些(遗留)代码,似乎在LD_LIBRARY_PATH上调用setenv(其值在编译时未知,实际上它将从命令中获取)行),现在我必须将其移植到 Windows。我怀疑 setenv 只是出于历
我在 SSIS 包上有一个敏感字符串参数,用于存储远程服务器的密码。 但是,当字符串值包含花括号时,作业代理会在配置该步骤的包参数时抛出错误: Microsoft SQL Server Managem
我们都非常了解 strictfp 的工作原理。 像这样: package com.hk.basicjava.tests.strictfp; import java.util.*; public cla
我正在对我的博客进行简单搜索。我使用亚美尼亚语,当我搜索时,这些字母总是很敏感。这是我的代码的一部分。提前谢谢你。 search_query = get.get('search') query_lis
我正在对我的博客进行简单搜索。我使用亚美尼亚语,当我搜索时,这些字母总是很敏感。这是我的代码的一部分。提前谢谢你。 search_query = get.get('search') query_lis
想象一下这个非常基本的可拖放设置: #dropArea 是可放置的。 #itemBox > .item 是可拖动对象。 由于某种原因,droppable
我有这样的网址: http://quickstart.local/public/category1/product2 并且在 url (category1/product2) 数字是 id ,从数据库
我是一名优秀的程序员,十分优秀!