Эй, может кто-нибудь указать, почему я продолжаю получать эту ошибку? Он работал несколько дней go, но когда я добавил раздел кода simulator. html, он просто перестал работать по какой-то причине. Мой учитель тоже не знает, почему ... Программа прямо сейчас представляет собой просто форму входа и регистрации с другой страницей, которая будет выполнять моделирование Powerball для моего задания!
app.py
import sqlite3
from flask import Flask, render_template, request, redirect, url_for, flash, session, logging
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin, LoginManager, login_user, login_required, logout_user, current_user
from wtforms import Form, StringField, PasswordField, validators, IntegerField
class simulatorform(Form):
nwb = IntegerField("1-2", [validators.NumberRange(min=1, max=2)])
rwb = IntegerField("1-2", [validators.DataRequired()])
npb = IntegerField("1-2", [validators.NumberRange(min=1, max=2), validators.DataRequired()])
rpb = IntegerField("1-2", [validators.NumberRange(min=1, max=2, message="Range of 1-2"), validators.DataRequired()])
ballswin = IntegerField("1-2", [validators.NumberRange(min=1, max=2), validators.DataRequired()])
pbwin = IntegerField("1-2", [validators.NumberRange(min=1, max=2), validators.DataRequired()])
user = StringField("Username", [validators.Length(min=4, max=20)])
psw = PasswordField("Password",
[validators.DataRequired(), validators.EqualTo("confirm", message="Passwords do not match")])
confirm = PasswordField("Confirm Password")
@app.route('/simulator', methods=["GET", "POST"])
def route_simulator():
form = simulatorform(request.form)
if request.method == "POST":
connie = sqlite3.connect('pb.db')
c = connie.cursor()
nwb = form.nwb.data
rwb = form.rwb.data
npb = form.npb.data
rpb = form.rpb.data
ballswin = form.ballswin.data
pbwin = form.pbwin.data
return render_template("simulator.html", form=form)
else:
return render_template("signup.html", form=form)
@app.route('/signup', methods=["GET", "POST"])
def route_signup():
form = simulatorform(request.form)
if request.method == "POST" and form.validate():
connie = sqlite3.connect('pb.db')
c = connie.cursor()
user = form.user.data
pw = form.psw.data
c.execute("INSERT INTO users(username, password) VALUES (?, ?)", (user, pw))
connie.commit()
connie.close()
redirect(url_for("route_login"))
flash("Your are now registered and can login", "success")
else:
return render_template("signup.html", form=form)
симулятор. html
<form method="POST" action="http://localhost:5000/simulator">
<div class="container">
<div class="row">
<div class="col-sm">
<div class="form-group">
{{ render_field(form.nwb,class_="form-control") }}
</div>
<div class="form-group">
{{ render_field(form.rwb,class_="form-control") }}
</div>
</div>
<div class="col-sm">
<div class="form-group">
{{ render_field(form.npb,class_="form-control") }}
</div>
<div class="form-group">
{{ render_field(form.rpb,class_="form-control") }}
</div>
</div>
<div class="col-sm">
<div class="form-group">
{{ render_field(form.ballswin,class_="form-control") }}
</div>
<div class="form-group">
{{ render_field(form.pbwin,class_="form-control") }}
</div>
<p><input type="submit" class="btn btn-primary" value="Submit"></p>
</div>
</div>
</div>
</form>
регистрация. html
<div class="container">
<div class="row">
<div class="col-sm">
</div>
<div class="col-sm">
{% from "_formhelpers.html" import render_field %}
<form method="POST" action="http://localhost:5000/signup">
<div class="form-group">
{{ render_field(form.user,class_="form-control") }}
</div>
<div class="form-group">
{{ render_field(form.psw,class_="form-control") }}
</div>
<div class="form-group">
{{ render_field(form.confirm,class_="form-control") }}
</div>
<p><input type="submit" class="btn btn-primary" value="Submit"></p>
</form>
</div>
<div class="col-sm">
</div>
</div>
</div>
Путь входа
@app.route('/login', methods=["GET", "POST"])
def route_login():
if request.method == "GET":
return render_template("login.html")
else:
try:
my_user = Users.query.filter_by(username=request.form["username"]).first()
except:
return redirect(url_for("route_login"))
if my_user is not None:
if my_user.password == request.form["password"]:
login_user(my_user)
return render_template("simulator.html")
else:
flash("An error occurred, please check username and password", "error")
return redirect(url_for('route_login'))
else:
flash("An error occurred, please check username and password", "error")
return redirect(url_for('route_login'))
Вход HTML
<div class="container">
{% with messages = get_flashed_messages(category_filter=["error"]) %}
{% if messages %}
{% for message in messages %}
<div class="alert alert-warning" role="alert">{{ message }}</div>
{% endfor %}
{% endif %}
{% endwith %}
</div>
<div>
{% with messages = get_flashed_messages(category_filter=["success"]) %}
{% if messages %}
{% for message in messages %}
<div class="alert alert-warning" role="alert">{{ category }}{{ message }}</div>
{% endfor %}
{% endif %}
{% endwith %}
</div>
<div class="container">
<div class="row">
<div class="col-sm">
</div>
<div class="col-sm">
<form action="http://localhost:5000/login" method="post">
<div class="form-group">
<label for="exampleInputUsername1">Username</label>
<input name="username" type="text" class="form-control" id="exampleInputEmail1"
aria-describedby="emailHelp"
placeholder="Enter Username">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input name="password" type="password" class="form-control" id="exampleInputPassword1"
placeholder="Password">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
<div class="col-sm">
</div>
</div>
</div>
Ошибка отслеживания
* Serving Flask app "app.py"
* Environment: development
* Debug mode: off
C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask_sqlalchemy\__init__.py:814: UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. '
C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask_sqlalchemy\__init__.py:835: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.
'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [27/May/2020 10:01:46] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/May/2020 10:01:48] "GET /login HTTP/1.1" 200 -
[2020-05-27 10:01:52,280] ERROR in app: Exception on /login [POST]
Traceback (most recent call last):
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\app.py", line 91, in route_login
return render_template("simulator.html")
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask\templating.py", line 140, in render_template
ctx.app,
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\flask\templating.py", line 120, in _render
rv = template.render(context)
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\jinja2\environment.py", line 1090, in render
self.environment.handle_exception()
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\jinja2\environment.py", line 832, in handle_exception
reraise(*rewrite_traceback_stack(source=source))
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\jinja2\_compat.py", line 28, in reraise
raise value.with_traceback(tb)
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\templates\simulator.html", line 1, in top-level template code
{% extends 'base.html' %}
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\templates\base.html", line 84, in top-level template code
{% block results %}
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\templates\simulator.html", line 23, in block "results"
{{ render_field(form.nwb,class_="form-control") }}
File "C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\lib\site-packages\jinja2\environment.py", line 471, in getattr
return getattr(obj, attribute)
jinja2.exceptions.UndefinedError: 'form' is undefined
127.0.0.1 - - [27/May/2020 10:01:52] "POST /login HTTP/1.1" 500 -