Я пытаюсь изучить python и некоторые из веб-фреймворков Python. В настоящее время я следую за курсом Flask, но столкнулся с проблемой с html-формой, из-за которой я не могу найти решение.Python Flask html форма не отображается - GET вместо метода POST?
Приведенный ниже код должен создать очень простую страницу в '/', где пользователь может войти в систему, используя форму html, и будет перенаправлен в/main при успешном входе в систему.
Однако вместо отображения html-формы страница немедленно перенаправляет на/main.
По крайней мере часть проблемы, кажется, что request.method
возвращается GET
, а не POST
, так как при добавлении flash(request.method)
, GET
возвращается.
Я проверил код несколько раз, и это точно так же, как и учебник, за которым я следую, но результат не тот.
Я использую python 3.5, и я верю, что флеш-версия 0.10.1.
Это мой главный питон файл:
from flask import Flask, render_template, request, session, \
flash, redirect, url_for, g
import sqlite3
# configuration
DATABASE = 'blog.db'
USERNAME = 'admin'
PASSWORD = 'admin'
SECRET_KEY = 'hard_to_guess'
app = Flask(__name__)
# pulls in app configuration by looking for UPPERCASE variables
app.config.from_object(__name__)
# function used for connecting to the database
def connect_db():
return sqlite3.connect(app.config['DATABASE'])
@app.route('/', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
if request.form['username'] != app.config['USERNAME'] or\
request.form['password'] != app.config['PASSWORD']:
error = 'Invalid credentials. Please try again.'
else:
session['logged_in'] = True
return redirect(url_for('main'))
return render_template('login.html', error=error)
@app.route('/main')
def main():
return render_template('main.html')
@app.route('/logout')
def logout():
session.pop('logged_in', None)
flash('You were logged out')
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(debug=True)
А вот login.html
код:
{% extends "template.html" %}
{% block content %}
<h2>Welcome to the Flask Blog!</h2>
<h3>Please login to access your blog.</h3>
<form action="" method="post">
Username: <input type="text" name="username" value="{{ request.form.username }}">
Password: <input type="password" name="password" value="{{ request.form.password }}">
<p><input type="submit" value="Login"></p>
</form>
{% endblock %}
Любая помощь или предложения будут очень высоко.
Большое спасибо, это была проблема. Я искал это в течение нескольких часов, но приравнивал другое с неправильным, если бы. – James