为什么当我尝试检查 request.method == 'POST' 时我的 Flask 代码出错?
Why is my Flask code erroring when I try to check if request.method == 'POST'?
我正在自学 Flask,有一个小的工作目录,包括一个允许用户提交 'username' 和 'password' 字段的页面。当用户点击 'submit' 时,我想让我的代码调用一个函数并传入他们的输入信息。
但是,我在尝试使用 "if request.method == 'POST':" 时遇到错误。
谁能告诉我怎么做
A) 查找错误信息
B)正确使用request.method?
由于开发原因,我不得不使用 Apache 而不是在本地托管 Flask 服务器,但这不应该是原因。
microblog.py:
from flask import Flask, request, abort, make_response, render_template, flash, redirect
app = Flask(__name__, template_folder='/sampledirectory/microblog/app/templates')
@app.route('/login', methods=['GET', 'POST'])
def login():
if( request.method == 'POST' ):
return "Test"
form = LoginForm()
return render_template('login.html', title='Sign In', form=form)
login.html:
{% extends "base.html" %}
{% block content %}
<h1>Sign In</h1>
<form action="" method="post" novalidate>
{{ form.hidden_tag() }}
<p>
{{ form.username.label }}<br>
{{ form.username(size=32) }}<br>
{% for error in form.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.password.label }}<br>
{{ form.password(size=32) }}<br>
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
<p>{{ form.submit() }}</p>
</form>
{% endblock %}
如果我删除
if( request.method == 'POST' ):
return "Test"
然后代码会按预期显示 login.html 页面。
您的问题是由于代码顺序不正确造成的。
默认情况下,页面应该 return 登录表单,但在您的情况下,您仅在有 post 请求时才创建表单。
由于您需要表单同时出现在 GET 和 POST 请求中,您可以这样做。
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if( request.method == 'POST' ):
print('Got POST request')
return render_template('login.html', title='Sign In', form=form)
您需要在 if 语句之外声明表单并缩进 return "test"
。
from flask import Flask, request, abort, make_response, render_template, flash, redirect
app = Flask(__name__, template_folder='/sampledirectory/microblog/app/templates')
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if( request.method == 'POST' ):
return "Test"
return render_template('login.html', title='Sign In', form=form)
我正在自学 Flask,有一个小的工作目录,包括一个允许用户提交 'username' 和 'password' 字段的页面。当用户点击 'submit' 时,我想让我的代码调用一个函数并传入他们的输入信息。
但是,我在尝试使用 "if request.method == 'POST':" 时遇到错误。 谁能告诉我怎么做
A) 查找错误信息 B)正确使用request.method?
由于开发原因,我不得不使用 Apache 而不是在本地托管 Flask 服务器,但这不应该是原因。
microblog.py:
from flask import Flask, request, abort, make_response, render_template, flash, redirect
app = Flask(__name__, template_folder='/sampledirectory/microblog/app/templates')
@app.route('/login', methods=['GET', 'POST'])
def login():
if( request.method == 'POST' ):
return "Test"
form = LoginForm()
return render_template('login.html', title='Sign In', form=form)
login.html:
{% extends "base.html" %}
{% block content %}
<h1>Sign In</h1>
<form action="" method="post" novalidate>
{{ form.hidden_tag() }}
<p>
{{ form.username.label }}<br>
{{ form.username(size=32) }}<br>
{% for error in form.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.password.label }}<br>
{{ form.password(size=32) }}<br>
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
<p>{{ form.submit() }}</p>
</form>
{% endblock %}
如果我删除
if( request.method == 'POST' ):
return "Test"
然后代码会按预期显示 login.html 页面。
您的问题是由于代码顺序不正确造成的。
默认情况下,页面应该 return 登录表单,但在您的情况下,您仅在有 post 请求时才创建表单。
由于您需要表单同时出现在 GET 和 POST 请求中,您可以这样做。
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if( request.method == 'POST' ):
print('Got POST request')
return render_template('login.html', title='Sign In', form=form)
您需要在 if 语句之外声明表单并缩进 return "test"
。
from flask import Flask, request, abort, make_response, render_template, flash, redirect
app = Flask(__name__, template_folder='/sampledirectory/microblog/app/templates')
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if( request.method == 'POST' ):
return "Test"
return render_template('login.html', title='Sign In', form=form)