【问题标题】:Python equivalent of PHP isset($_POST)Python 等价于 PHP isset($_POST)
【发布时间】:2019-08-05 04:14:09
【问题描述】:

我正在处理一个有两个提交按钮的表单。

根据this SO accepted answer,可以知道在 PHP 中按下了哪个提交按钮,执行如下操作:

<input type="submit" name="publish" value="Publish">
<input type="submit" name="save" value="Save">

<?php
    if (isset($_POST['publish'])) {
        # Publish-button was clicked
    }
    elseif (isset($_POST['save'])) {
        # Save-button was clicked
    }
?>

现在,如果可能的话,我需要对 Python 做同样的事情。 目前,我正在检索 POSTed 值,例如:

POST={}
args=sys.stdin.read().split('&')

for arg in args:
    t=arg.split('=')
    if len(t)>1: k, v=arg.split('='); POST[k]=v

但是,这样做我只能知道我的表单的值,而不是实际设置的值。

if POST.get('publish', 'default_value') 这样的东西总是会评估为True,因为在我的表单中,它的值 (Publish) 已设置。

我可以做些什么来模仿 PHP isset?有没有办法在 Python 中做到这一点,最好没有名声?

编辑

在@04FS 发表评论后,我进行了一个简单的测试,以检查我的假设是否正确,并且确实如此。

这是我的测试。我按下了两个按钮之一,但无论如何,我都会收到:

import sys
import cgi
import cgitb

cgitb.enable()
print ("Content-type: text/html\n\n")

# https://stackoverflow.com/a/27893309/1979665
POST={}
args=sys.stdin.read().split('&')

for arg in args:
    t=arg.split('=')
    if len(t)>1: k, v=arg.split('='); POST[k]=v

if POST.get('publish', 'default_value'):
    print("<p>Publish was pressed</p>")

if POST.get('save', 'default_value'):
    print("<p>Save was pressed</p>")

输出是:

Publish was pressed

Save was pressed

【问题讨论】:

  • “只能知道我的表单的值,而不是实际设置的值” - 不知道你的意思。如果publish 按钮没有被点击,那么它首先不会成为表单提交数据集的一部分。
  • @04FS 感谢您的观察,我将再次测试代码并检查代码是否实际评估为 True,尽管我没有按下发布 sumbmit 按钮。调试起来有点困难,但我会弄清楚并更新我的发现。谢谢。
  • @04FS 刚刚测试,显然,我似乎无法说出按下了哪个按钮,我会用结果更新我的问题。
  • 我认为你的错误是你在这里提供了一个默认值。如果publish 未在输入数据中设置,那么您使其 具有值default_value。当您通过 if 检查它时,这是一个 true-y 值,因此您会得到两个输出。你只想要POST.get('publish') - 如果参数实际存在,则返回一个值 - 或者 null/false/whatever(不知道 python 中的详细信息),如果它不存在。
  • 是的,做到了!谢谢!显然我已经放置了default_value ,实际上并没有考虑太多。如果您想发表评论作为答案,我将非常乐意接受!

标签: php python forms submit form-submit


【解决方案1】:

这里的错误是您在get 方法调用中提供了一个默认值。如果输入数据中未设置publish,则POST.get('publish', 'default_value') 返回default_value。当您通过 if 检查它时,这是一个 true-y 值 - 所以无论实际单击哪个按钮提交表单,您都会获得两个输出。

您只需要 POST.get('publish') 在这里 - 如果参数实际存在,则返回一个值 - 或者 null/false/whatever(不知道 python 中的详细信息),如果它不存在。

【讨论】:

    【解决方案2】:

    这是一种在Python Flask

    中处理多个提交按钮的非常有效的方法

    前端:

    <form method="POST" enctype="multipart/form-data">
              <input type ="submit" name="action" value="upload">
    
              <input type ="submit" name="action" value="download">
    
              <input type ="submit" name="action" value="next">
     </form>
    

    后端:

    if request.form['action'] == 'upload':
        return 'upload pressed'
    elif request.form['action'] == 'download':
        return 'download pressed'
    elif request.form['action'] == 'next':
        return 'next pressed'
    

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多