Python Flask html表单没有显示 - GET而不是POST方法?

时间:2016-04-25 18:59:40

标签: python html login flask html-form

我正在尝试学习python和一些Python Web框架。目前我正在关注Flask课程,但遇到了一个我无法找到解决方案的html表单问题。

下面的代码应该在'/'创建一个非常简单的页面,用户可以使用html表单登录,并在成功登录后重定向到/ main。

然而,不是显示html表单,页面会立即重定向到/ main。

问题的至少一部分似乎是request.method正在返回GET而不是POST,因为当我添加flash(request.method)时,GET是返回。

我已多次检查代码,它与我正在关注的教程完全相同,但结果不一样。

我正在使用python 3.5,我相信Flask版本0.10.1。

这是我的主要python文件:

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 %}

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

您的缩进级别看起来与if ...then ...else逻辑中的request.method == 'POST'块不同。缩进else块以匹配并试一试。