2016-04-25 11 views
0

私はPythonといくつかのPython Webフレームワークを学びたいと思っています。現在、私はFlaskコースに従っていますが、解決策が見つからないhtmlフォームで問題が発生しました。Python FlaskのHTMLフォームが表示されない - POSTメソッドの代わりにGET?

以下のコードは、ユーザーがHTMLフォームを使用してログインでき、ログインが成功すると/ mainにリダイレクトされる非常に単純なページを '/'に作成することになっています。

しかし、htmlフォームを表示する代わりに、ページは直ちに/ mainにリダイレクトされます。問題の

少なくとも一部は、私はflash(request.method)を追加するとき、GETが返されるので、request.methodは、GET、というよりもPOSTを返していることのようです。

コードを複数回チェックしましたが、これは私が次のチュートリアルとまったく同じですが、結果は同じではありません。

私は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

関連する問題