【问题标题】:Remove URL Params after page loads in Google App Engine在 Google App Engine 中加载页面后删除 URL 参数
【发布时间】:2013-07-01 03:17:42
【问题描述】:

首先,总的来说,我对网络编程非常陌生。我在网上阅读了很多教程,这有点令人困惑,因为其中一些已经过时了。因此,如果我走的是一条根本错误的道路,我会喜欢有关 The Right Way 的建议。话虽如此,这只是一个有趣的项目,所以如果有一种简单(

所以无论如何,我正在使用 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();

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

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

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

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

【问题讨论】:

  • form 标签的实际属性是什么?您使用的是 GET 还是 POST?

标签: python google-app-engine url


【解决方案1】:

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

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

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

编辑:

默认情况下,表单通常会发出 POST 请求。通常&lt;form&gt; 元素将有一个action 属性来指定要发送到的URL。但是,如果它没有 action 属性,它将向当前 URL 发出 POST 请求。

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

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

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

【讨论】:

  • 我想我已经在使用 post 操作(表单标签中的方法 =“post”,编辑问题以显示),但点击按钮后 URL 没有改变。我认为 request.POST 建议可能会让我大部分时间到达那里,不过,我今晚会尝试(在工作中,所以我可以看到页面但不能编辑它)。我不确定我理解你对这个动作的意思。我是否应该添加类似 action="/calculation" 的内容,以便在单击按钮时删除所有 URL 参数?
  • 除了method还需要加上action="http://buggyapp.appspot.com/calculation"
  • 谢谢,添加动作正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2019-01-28
  • 2012-05-05
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多