我在自己的网站上做了3个页面:一个要注册,另一个要登录,另一个用作“主页”。我需要让网站将用户从/register
扔到/login
,如果正确登录,将重定向到/home
,否则它将发送一个带有一些文本的框,例如“无效密码” ”。但在代码中的任何地方都不起作用。
我搜索了很长一段时间...但是所有答案都说相同的话,这对我不起作用。
更新 login.html :
<body>
<div>
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<h4>{{ message }}</h4>
{% endfor %}
{% endif %}
{% endwith %}
</div>
<form class="box" action="">
<h1>Login</h1>
<input placeholder="Usuario" type="text" id="inpUser" required autocomplete="off">
<input placeholder="Senha" type="password" id="inpPass" required>
<input type="submit" value="Entrar" onclick="main()">
</form>
<script src="{{ url_for('static',filename='login.js') }}"></script>
更新 app.py/登录 他收到POST请求:
@app.route('/login', methods = ['POST','GET'])
def login():
error = None
if request.method == 'POST':
data = request.form.to_dict()
username = data['User']
password = hassh.blake2b(data['Password'])
cur.execute("SELECT * FROM WebApp")
rows = cur.fetchall()
a = ''
for i in username: #adiciona um SALT no hash
if i.lower() == 'a' or i.lower() == 'e' or i.lower() == 'i' or i.lower() == 'o' or i.lower() == 'u':
a+=i #coloca as vogais do username na variavel
else:
pass
b = ''.join(reversed(a))
password += b
for row in rows:
dbUsername = str(row[0])
dbPass = str(row[1])
if username == dbUsername and password == dbPass:
valid = True
break
else:
valid = False
print(str(valid))
if valid == False:
return render_template('login.html',message='Credenciais invalidas')
else:
url_for('home')
redir_url="http://192.168.0.4:5000/"
return redirect(redir_url)
return render_template('login.html')
我希望服务器上已有名称时,它会警告用户。
我希望用户创建帐户时,会将其从/register
重定向到/login
,如果登录正确,它将被发送到/home
。
我希望如果登录错误,将使用户看到他错过了一些东西,一闪而过。
我没有从Flash或重定向返回的内容。登录/注册页面保持不变。此外,在用户输入正确的登录名后,他执行了我的@ app.route('/home')
的代码,但没有打开页面,只是执行了print('home')
,表示重定向是逻辑部分,而不是可视部分。如果可以将用户从登录名重定向到家庭,并显示闪光灯,我可以照顾/register
。
如有必要,我会发送完整的login.html和app.py。
Edit1 :我解决了Flash问题,只需将邮件的可视代码放在<div>
Edit2 :经过测试,我发现问题确实出在登录功能上,可能是JavaScript。我通过将我的家(仍然没有CSS和JS)重定向到/login
来解决这个问题,但是没有/登录到家
Edit3 :不是CSS。并且flask尝试重定向后在控制台上返回192.168.0.4 - - [20 / Aug / 2019 19:00:36]" GET /home HTTP / 1.1 "200 -
,但是它仍然不会更改URL。还有另一种更改网址的方法吗?重定向看起来好像没有转到浏览器...
Edit4 :“重定向”在IF结构中不起作用。好吧...