我正在处理具有两个提交按钮的表单。
根据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
答案 0 :(得分:1)
这里的错误是您在get
方法调用中提供了默认值。如果未在输入数据中设置publish
,则POST.get('publish', 'default_value')
返回default_value
。当您通过if进行检查时,该值为true -y,因此无论实际单击了哪个按钮来提交表单,您都将获得两个输出。
您只想在此处使用POST.get('publish')
-如果参数实际存在,则返回一个值-如果不存在,则返回null / false /任何(不知道python中的详细信息)。