2016-04-25 45 views
0

我在学习python和一些Python web框架。目前我正在关注一个Flask课程,但遇到了一个我无法找到解决方案的html表单的问题。Python Flask html表单不显示 - GET而不是POST方法?

下面的代码应该在'/'处创建一个非常简单的页面,用户可以使用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 %} 

任何帮助或建议将是非常赞赏。

回答

0

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

+0

非常感谢,这是问题所在。我一直在寻找那个好几个小时,但是把它与错误的如果一致。 – James

相关问题