Python 相当于 PHP isset($_POST)
Python equivalent of PHP isset($_POST)
我正在处理一个有两个提交按钮的表单。
根据 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 集?有没有办法在 Python 最好不用 fameworks 的情况下做到这一点?
编辑
在@04FS 发表评论后,我运行 进行了一个简单的测试来检查我的假设是否正确,而且看起来确实如此。
这是我的测试。我按下两个按钮之一,但无论如何,我收到:
import sys
import cgi
import cgitb
cgitb.enable()
print ("Content-type: text/html\n\n")
#
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
此处的错误是您在 get
方法调用中提供了默认值。如果 publish
未在输入数据中设置,则 POST.get('publish', 'default_value')
returns default_value
。当您通过 if 检查它时,这是一个 true-y 值 - 所以您会得到两个输出,而不管实际单击了哪个按钮来提交表单。
这里你只需要 POST.get('publish')
- returns 一个值,如果参数实际存在 - 或者 null/false/whatever(不知道 [=20 中的详细信息) =]), 如果没有。
这是一种非常有效的方法来处理 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'
我正在处理一个有两个提交按钮的表单。
根据 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 集?有没有办法在 Python 最好不用 fameworks 的情况下做到这一点?
编辑
在@04FS 发表评论后,我运行 进行了一个简单的测试来检查我的假设是否正确,而且看起来确实如此。
这是我的测试。我按下两个按钮之一,但无论如何,我收到:
import sys
import cgi
import cgitb
cgitb.enable()
print ("Content-type: text/html\n\n")
#
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
此处的错误是您在 get
方法调用中提供了默认值。如果 publish
未在输入数据中设置,则 POST.get('publish', 'default_value')
returns default_value
。当您通过 if 检查它时,这是一个 true-y 值 - 所以您会得到两个输出,而不管实际单击了哪个按钮来提交表单。
这里你只需要 POST.get('publish')
- returns 一个值,如果参数实际存在 - 或者 null/false/whatever(不知道 [=20 中的详细信息) =]), 如果没有。
这是一种非常有效的方法来处理 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'