我正在尝试学习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 %}
非常感谢任何帮助或建议。
答案 0 :(得分:0)
您的缩进级别看起来与if ...then ...else
逻辑中的request.method == 'POST'
块不同。缩进else
块以匹配并试一试。