【问题标题】:How do I pass multiple variables from one handler to another in GAE?如何在 GAE 中将多个变量从一个处理程序传递到另一个处理程序?
【发布时间】:2015-05-14 10:55:52
【问题描述】:

我想将用户重定向到一个确认页面,如果他们输入有效的主题,该页面将显示主题和内容(如果有的话),但如果主题为空白或超过,则留在同一页面并显示错误三百字。

这是我的后端代码:

def post(self):
    subject = self.request.get('subject')
    content = self.request.get('content')
    a, b = self.validSubject(subject)
    if a == True and b == True:
        self.redirect('/confirm')
    else:
        if a == False:
            error = "Title cannot be blank!"
        if b == False:
            error = "Title cannot be over 300 characters."
        self.render("newpost.html", subject = subject, content = content, error = error)

这里是 newpost.html 模板的代码:

    <h2>New Question</h2>
    <hr>
    <form method="post">
  <label>
    <div>Title</div>
    <input type="text" id="subject" name="subject">
  </label>

  <label>
    <div>
    <textarea name="content" id="postcontent"></textarea>
    </div>
  </label>

  <b><div class="error">{{error}}</div></b>

    <input type="submit">
    </form>

我尝试将action="/confirm" 添加到 POST 表单,但即使出现错误也会重定向到 /confirm。我查看了 webapp2 文档,但找不到任何关于如何在重定向上传递变量的信息。 (https://webapp-improved.appspot.com/api/webapp2.html#webapp2.redirect)

我正在使用 webapp2 和 jinja2。感谢您提前提供的任何帮助,我已经查看这段代码很长一段时间了:(

【问题讨论】:

    标签: python-2.7 google-app-engine jinja2 webapp2


    【解决方案1】:

    无论您使用什么后端平台或语言,您尝试编写的模式在 http 中都不起作用。您的 HTML 正在发布到服务器,GAE 代码正在处理该帖子。在交互的那个时候,浏览器已经提交并且正在等待来自服务器的响应。你不能在那个时候停止提交,因为它已经发生了。

    您应该考虑在表单提交到服务器之前验证 Javascript 中的输入。这样,如果您的数据无效,您可以首先禁止提交表单。

    查看以下问题以查看此示例:

    JavaScript code to stop form submission

    【讨论】:

    • 谢谢迈克。我将尝试验证 Javascript 中的输入并将 action="/confirm" 添加到我的 POST 表单中。
    • 并确保您意识到 action="/confirm" 只是告诉浏览器使用哪个 URL 来发布表单。因此,如果您希望在服务器端完成额外的工作,请确保您在 /confirm 处的 POST 处理程序正在处理它(如果您要放入该操作语句)。在 POSTS 中不执行任何操作到提供 GET 服务的同一 URL。
    • 感谢您解释一切之间的相互作用,这真的很有帮助。我只是在 HTTP 中磕磕绊绊,从未花时间真正学习它。
    • 最后,我决定在'/confirm'中添加检查。
    • 您可以使用带有查询字符串的重定向 get 重定向并传递参数或重定向您的帖子 (307)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2018-03-11
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多