Я пытаюсь следовать учебнику https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iii-web-forms с небольшими изменениями (я пытаюсь использовать его для своей домашней работы). Я просто пытаюсь изменить его, поэтому я получу данные формы, а затем обработаю их. Пока что я просто пытаюсь набрать sh данных, позже я хочу перенаправить на другую страницу и показать результаты там. Проблема в том, что все, что я пишу в форме, ничего не делает - меня просто перенаправляют на главную страницу, где находится форма. Это даже не очищается! Что я делаю неправильно? Пока что у меня есть:
Структура каталогов:
homework:
-app:
-templates:
-base.html
-index.html
-__init__.py
-forms.py
-routes.py
-config.py
-main.py
config.py
содержит только класс Config с некоторыми константами в качестве атрибутов, поэтому я не включил его, а main.py
только импортирует приложение.
база. html:
<html>
<head>
<title>Weather consultant</title>
</head>
<body>
<div>
Weather consultant:
<a href="{{ url_for('index') }}">Home</a>
</div>
<hr>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</body>
</html>
index. html:
{% extends "base.html" %}
{% block content %}
<h1>Enter query</h1>
<form action="" method="post" novalidate>
<p>
{{ form.city.label }}<br>
{{ form.city()}}
</p>
<p>
{{ form.date.label }}<br>
{{ form.date() }}
</p>
<p>{{ form.use_dark_sky() }}
{{ form.use_dark_sky.label }}</p>
<p>{{ form.use_storm_glass() }}
{{ form.use_storm_glass.label }}</p>
<p>{{ form.use_weather_stack() }}
{{ form.use_weather_stack.label }}</p>
<p>{{ form.use_yahoo() }}
{{ form.use_yahoo.label }}</p>
<p>{{ form.use_open_weather() }}
{{ form.use_open_weather.label }}</p>
<p>{{ form.use_weather_bit() }}
{{ form.use_weather_bit.label }}</p>
<p>{{ form.use_visual_crossing() }}
{{ form.use_visual_crossing.label }}</p>
<p>{{ form.submit() }}</p>
</form>
{% endblock %}
__init__.py:
from flask import Flask
from config import Config
app = Flask(__name__)
app.config["SECRET_KEY"] = "not-so-secret"
config = Config()
from app import routes
forms.py:
class UserInputForm(FlaskForm):
city = StringField("City")
date = StringField("Enter desired date (format DD/MM/YYYY)")
use_dark_sky = BooleanField("Use DarkSky API")
use_storm_glass = BooleanField("Use Storm Glass API")
use_weather_stack = BooleanField("Use WeatherStack API")
use_yahoo = BooleanField("Use Yahoo Weather API")
use_open_weather = BooleanField(
"Use OpenWeather API - only current and near future data")
use_weather_bit = BooleanField(
"Use WeatherBit API - only current and future data")
use_visual_crossing = BooleanField("Use VisualCrossing API")
submit = SubmitField("Search")
rout.py:
@app.route("/", methods=["GET", "POST"])
def index():
form = UserInputForm()
if form.validate_on_submit():
session["form"] = form
flash('Data requested for city {}, date={}'.format(
form.city.data, form.date.data))
return redirect(url_for("index"))
return render_template("index.html", form=form)