【发布时间】:2015-07-09 07:23:21
【问题描述】:
我正在维护别人的旧 CherryPy 代码,并且有一个有趣的情况我正在尝试理解。考虑这个演示它的代码:
import cherrypy
class HelloWorld(object):
def index(self, name):
html = """<form method="post">
<input type="text" name="name" value="%s" /></form>
Hello %s!""" % (name, name)
return html
index.exposed = True
cherrypy.quickstart(HelloWorld())
使用python hello.py 运行它并转到http://127.0.0.1:8080/?name=foo。输出是一个带有“foo”的文本输入框,后跟“Hello foo!”。
但是如果我编辑框中的文本并将其替换为“bar”并按回车(提交表单),则结果不是输入框中的“bar”和“Hello bar!”下面但是(ascii艺术输入框道歉):
+---------------------+
| [u'foo', u'bar'] |
+---------------------+
Hello [u'foo', u'bar']!
CherryPy 似乎正在将 URL 查询字符串“name”参数值与 POST 请求正文中提交的表单“name”值结合起来,并为公开的 index() 方法提供一个包含这两个值的列表。
就我所维护的代码而言,它并不总是以这种方式工作。所以这就引出了我的两个问题:
- CherryPy 在 3.7.0 之前的某些版本(我正在测试的版本)中是否改变了处理这种情况的方式?
- 我可以将 CherryPy 配置为恢复到旧的行为,或者至少让 POST 值覆盖查询字符串值吗?
(我对 CherryPy 文档并不十分熟悉,但我无法在那里找到答案。)
【问题讨论】:
-
问题可能是您的浏览器处理占位符文本与自动填充表单字段的方式存在冲突。
标签: python forms query-string cherrypy