【发布时间】: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