我想将GET方法发送到Flask视图,但我无法处理它。有人能告诉我我做错了什么吗?

2024-06-16 10:44:55 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的程序中,有一个GET请求从表单发送到Flask视图

表格如下:

<form method="GET" action="{{url_for('rerouter')}}">
            {{ form.hidden_tag() }}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Search</legend>

                <div>
                    {{ form.welder_selector.label(class="form-control-label") }}
                    {{ form.welder_selector(class="searchable-welder-js",style="width: 28%") }}

                    {{ form.wps_selector.label(class="form-control-label") }}
                    {{ form.wps_selector(class="searchable-wps-js",style="width: 27.8%") }}

                    {{ form.process_selector.label(class="form-control-label") }}
                    {{ form.process_selector(class="searchable-process-js",style="width: 27.8%") }}
                </div>


            </fieldset>
            <div class="form-group">
                 {{ form.submit(class='btn btn-outline-success') }}
            </div>

        </form>

我设置为GET和action的form方法也被发送到视图:

相应的视图:

@app.route("/rerouter", methods=['GET', 'POST'])
def rerouter():

    if request.method == 'GET':
        value1 = request.args.get('welder_selector')
        value2 = request.args.get('wps_selector')
        value3 = request.args.get('process_selector')

        print("Im at rerouter with : ", value1, value2, value3)
        if value1 is not 0 or None:
            if value2 is 0 or None:
                if value3 is 0 or None:

                    return redirect(url_for('welderdatabase', welder_id=value1))
                else:

                    return redirect(url_for('home'))
          ....

HTML表单在此视图中生成:

@app.route("/", methods=['GET', 'POST'])
@app.route("/home", methods=['GET', 'POST'])
def home():

    form = TrialSearchMultipleForm()

    return render_template('home.html', title='Home', form=form)

我已经用POST方法成功地实现了这个程序,但是我后来了解到正确的方法是使用GET发送表单数据

我在控制台里看到了什么

127.0.0.1 - - [29/Apr/2019 09:10:20] "GET /rerouter?welder_selector=__None&wps_selector=__None&process_selector=__None&submit=Search HTTP/1.1" 302 
Im at rerouter with :  __None __None __None

所以我要找的是:

  1. 我不明白为什么它返回'\u None'。我想了解一下为什么它在GET请求中返回'\u None',而不是'None'。我试着到处寻找答案
  2. 程序发送数据,但它没有重定向到任何页面,只是在主页视图重新加载。我通过控制台得到请求,所以我知道数据正在被发送

我该怎么解决这个问题

  1. 我试过禁用CSRF,只是想看看“无”是否会变为“无”。没有成功
  2. 我有点理解GET请求是以字符串的形式发送的,因此这可能是无的原因,但是如何绕过这个问题并获得所需的输出呢

预期结果:

我在重播:无 或 我在重播:1无 (基于输入)

并使用条件成功重定向到页面。 我的代码不是很干净,因为程序的这一部分是不断变化的,我需要保持每件事简短,所以请容忍我

我将非常感谢任何指点或建议或有用的提示


Tags: 程序divformnone视图getifpost
1条回答
网友
1楼 · 发布于 2024-06-16 10:44:55

不知道它是否能解决您的问题-只是粗略地看一下您的python脚本

if value1 is not 0 or None:

这不是你想的那样。 “无”被认为是假的。您编写的内容相当于以下两个独立的布尔表达式:

if (value1 is not 0) or (False):

因此,表达式中唯一与if语句体是否执行有关的部分是第一部分(value1不是0)。这意味着如果value1为None,那么if语句的主体将不会被执行

另外,假设这是固定的,您可能不想用“or”分隔这两个条件。在我看来,value1不能是这些值中的任何一个,在这种情况下,您将使用“and”

顺便说一句,这可能不是很关键,但我将检查value1是否不等于值0,而不是检查它们的标识是否不相同

然而,根据pep8,当一个人检查某个东西是否为None时,他应该选择(value1不是None)而不是(value1!=无)。在我看来,固定条件是这样的:

if value1 != 0 and value1 is not None:

相关问题 更多 >