【问题标题】:Why is my Flask code erroring when I try to check if request.method == 'POST'?当我尝试检查 request.method == 'POST' 时,为什么我的 Flask 代码出错?
【发布时间】:2019-07-17 14:13:13
【问题描述】:

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

但是,我在尝试使用“if request.method == 'POST':”时遇到错误。 谁能告诉我怎么做

A) 查找错误信息 B) 正确使用 request.method?

由于开发原因,我必须使用 Apache 而不是在本地托管 Flask 服务器,但这不应该是原因。

微博.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 页面。

【问题讨论】:

    标签: html post flask http-post


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

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

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

      由于您需要表单同时出现在 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)
      

      【讨论】:

        猜你喜欢
        • 2022-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-07
        相关资源
        最近更新 更多