2016-04-25 4 views
0

Я пытаюсь изучить 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 %} 

Любая помощь или предложения будут очень высоко.

ответ

0

Похоже, что уровни отступов выходят из блока if ...then ...else в вашей логике request.method == 'POST'. Отступьте ваш блок else, чтобы соответствовать и попробовать.

+0

Большое спасибо, это была проблема. Я искал это в течение нескольких часов, но приравнивал другое с неправильным, если бы. – James