Python等价于PHP isset($ _ POST)

时间:2019-03-14 10:01:55

标签: php python forms submit form-submit

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

根据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?最好不用fameworks在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

1 个答案:

答案 0 :(得分:1)

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

您只想在此处使用POST.get('publish')-如果参数实际存在,则返回一个值-如果不存在,则返回null / false /任何(不知道python中的详细信息)。