2016-04-25 120 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