1

首先,总的来说,我对网络编程很陌生。我在网上阅读了很多教程,这有点令人困惑,因为其中一些已经过时了。因此,如果我走的是一条根本错误的道路,我会喜欢有关 The Right Way 的建议。话虽如此,这只是一个有趣的项目,所以如果有一种简单(<10 行)的方式来获得我想要的东西,我希望今天能看到快速的结果,即使长期来看我最终会发生根本性的改变事物。

所以无论如何,我使用 Google App Engine (Python 2.7) 来做一个简单的计算。我显示一个表单,用户填写值,单击底部的一个按钮,一些结果文本与计算结果一起显示。这部分工作正常。

对于我自己的测试,总是重新输入输入值很烦人,而且有些字段对用户来说并不完全明显,所以我希望能够从表单“ http:/ ”向某人发送一个链接/buggyapp.appspot.com/calculation?input1=100&input2=200 " 并让它填写这两个参数。这部分也有效。

问题是当用户加载那种链接,更改表单中的一个值,然后单击按钮时。它不使用(更改的)表单值,而是使用 URL 中的值。我想解决这个问题,理想情况下,我希望 URL 栏在页面加载后甚至不显示 URL 参数。

我不确定需要哪些信息来帮助您找到我做错了什么。

这是 HTML 的一部分,它是一个 Jinja2 模板:

<form method="post">
  <input value="{{ input1 }}" name="input1">
  <input value="{{ input2 }}" name="input2">
  <button class="submit" type="submit">Calculate</button>
</form>
<p>{{ result }}</p>

这是python代码:

def get(self):
  input1 = request.get('input1')
  input2 = request.get('input2')

  # some irrelevant(?) code to set default values on the initial load if there are no URL Params

  result = str(input1+input2) #actual calculation slightly more complicated than this
  template = JINJA_ENVIRONMENT.get_template('calculation.html')
  self.response.write(template.render(vars()))

无论我将计算放在 get 处理程序还是 post 处理程序中,它的行为似乎都是一样的。目前,我只是从另一个调用一个:

def post(self):
  input1 = request.get('input1')
  print input1 # even this shows the URL value (if one exists), not form value
  return self.get();

因此,我的下一步是更改表单输入的名称,使其与 URL 参数不同,并添加额外的代码来合并潜在的输入源。但这并不能真正让我得到我想要的,即一旦 URL 参数填充了输入表单,它们就会消失。它还使生成此类链接的代码部分复杂化。

我更喜欢纯 Python 的解决方案,但我愿意使用 javascript。还有其他堆栈溢出问题/答案暗示 javascript 机制会做我想要的,但我对它们中的任何一个都不够了解,无法将它们应用于我的问题。

我确定我做错了很多其他事情,而且我可能过于简化了事情或没有发布足够的信息。我是来学习的,所以开火吧。并提前感谢您的帮助。

tl; dr-我如何使用一次 URL 参数,然后将它们从 URL 中删除,这样它们就不会覆盖后续帖子中的表单输入?

4

1 回答 1

1

HTTP GET 请求通常在 URL 中包含参数,因为没有其他地方可以传递它们(没有请求正文)。

HTTP POST 请求通常在请求正文中包含参数,但仍然可以在 URL 中包含参数。

看起来您正在使用某种 Javascript 来发布表单。确保您使用的是 POST 请求并将参数放入 POST 正文中。只要您发出 POST 请求,大多数库都会自动将参数放入 POST 正文中。

编辑:

默认情况下,表单通常会发出 POST 请求。通常,该<form>元素将具有action指定要发送到的 URL 的属性。但是,如果它没有action属性,它将向当前 URL 发出 POST 请求。

在您的情况下,当前 URL 包含参数,并且这些参数会随您的请求再次提交。你应该有几个选择。

  1. 在您的表单中指定,action这样您就不会提交到已附加参数的相同 url。

  2. request.POST['input1']在您的请求处理程序中,从帖子正文 ( ) 而不是 url 中读取数据。

于 2013-07-03T14:53:44.667 回答