当我尝试检查request.method =='POST'时,为什么我的Flask代码出错?

时间:2019-07-17 14:13:13

标签: html post flask http-post

我正在自学Flask,并且有一个小的工作目录,包括一个允许用户提交“用户名”和“密码”字段的页面。当用户单击“提交”时,我想让我的代码调用一个函数并传递其输入信息。

但是,尝试使用“ 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页面。

2 个答案:

答案 0 :(得分:1)

您的问题是由于代码顺序不正确引起的。

默认情况下,页面应返回登录表单,但在您的情况下,仅当有发布请求时才创建表单。

由于您需要将该表单同时显示在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)

答案 1 :(得分:1)

您需要在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)