Чего я хочу достичь: после входа в систему с правильными учетными данными на странице / login, пользователь перенаправляется на страницу / camera.
Фактический результат: / страница входа в систему только что перезагрузилась, с формой входы стерты.
Нет сообщений об ошибках / исключений
Я просмотрел код, но не могу понять, почему он это делает. Любая помощь приветствуется.
main.py:
from flask import Flask, render_template, redirect, url_for
from flask_wtf import FlaskForm
from flask_login import LoginManager, login_required
from flaskconfig import Config
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired
from werkzeug.security import check_password_hash
app = Flask(__name__)
app.config.from_object(Config)
logindatabase = {
'User1': 'pbkdf2:sha256:150000$QLfB2gVe$fd76b36df43686e7a8e27a9066331727e246f0d2835688d8d303af2f9b13a1cc',
'User2': 'pbkdf2:sha256:150000$4rK2hvN8$d4940c3dac1ce6f293bc495934fce92cb840c470c83eb0e3b864f407eec85868'
}
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Sign In')
@app.route('/')
def home():
return redirect(url_for('login'))
@app.route('/login', methods = ['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = form.username.data
if user is None or user not in logindatabase.keys() or check_password_hash(logindatabase[user], form.password.data) == False:
return redirect(url_for('login'))
else:
login_user(user)
return redirect(url_for('camera'))
return render_template('login.html', title = 'Log In', form = form)
@app.route('/camera')
@login_required
def camera():
return render_template('camera.html')
if __name__ == '__main__':
app.run(host = '0.0.0.0')
Примечание: работает на хосте 0.0.0.0, так как я работаю на repl.it (преднамеренно)
templates> логин. html:
<!DOCTYPE html>
<html>
<head>
<title>Login Page - Door Camera System</title>
</head>
<body>
<h1>Welcome!</h1>
<hr>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for msg in messages %}
<li>
{{ msg }}
</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block content %}
<h2>Sign In</h2>
<form action="" method="get" novalidate>
{{ form.hidden_tag() }}
<p>
{{ form.username.label }}<br>
{{ form.username(size=32) }}
</p>
<p>
{{ form.password.label }}<br>
{{ form.password(size=32) }}
</p>
<p>{{ form.submit() }}</p>
{{ form.csrf_token }}
</form>
{% endblock %}
</body>
</html>
шаблоны> камера. html:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js"></script>
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
</head>
<body>
<input type="checkbox" class='toggle' checked data-toggle="toggle">
<div class='status'>System Active</div>
</body>
<script>
$(document).ready(function() {
$('.toggle').click(function() {
var toggleval = $('.status').text();
if (toggleval === 'System Disabled'){
$('.status').html('System Active');
}
else{
$('.status').html('System Disabled');
}
});
});
</script>
</html>
flaskconfig.py:
import os
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or 'flaskwebsecretkey5000'
Спасибо, что много заранее !!