【问题标题】:Python Bottle - Difference between "redirect" and "return template"Python Bottle - “重定向”和“返回模板”之间的区别
【发布时间】:2015-07-28 12:49:08
【问题描述】:

我有两个关于瓶子的问题:

1) 有什么区别:

redirect('/login')return template('login')

不会让用户继续访问/login 页面吗?

2) 我可以像 return 一样将参数传递给 redirect 吗?

例如:

这是否有效:redirect('/login', userName="foo"),就像我们在这种情况下所做的那样:

return template('login', userName="foo")

【问题讨论】:

  • 不熟悉 Bottle 但在 Flask 中return templaterender_template 更准确)将呈现模板,redirect 会将用户发送到不同的视图功能,然后你会得到任何东西从该函数、不同的模板、一些 JSON 或上帝帮助您的 XML 返回。

标签: python redirect bottle


【解决方案1】:

1) 有什么区别:

redirect('/login')return template('login')

来自bottle documentation for redirect

要将客户端重定向到不同的 URL,您可以发送 303 See OtherLocation 标头设置为新 URL 的响应。 redirect() 确实 给你的

redirect() 方法将向用户发送 303 响应,然后用户将向您的服务器发送另一个请求以获取“/login”页面。如果您使用template() 方法,您将直接将网页返回给用户。

2) 我可以像 return 一样将参数传递给 redirect 吗?

redirect() 不接受查询变量,例如您传递给template() 的变量。如果要使用这些变量,则需要在 url 上明确设置它们。例如。要将'/login'userName="foo" 一起使用,您需要调用redirect('/login?userName="foo")

编辑如果您不想在 url 中存储所有变量,您应该尝试在页面呈现时获取这些值。 例如在没有变量的情况下调用 redirect('/login'),并让渲染“/login”的方法负责使用正确的变量调用 template()

【讨论】:

  • 1) 我观察到的几件事 - 如果我 return,它只是将模板返回给用户。但是如果我redirect,则控制转到该路线,执行其功能,然后将模板返回给用户。此外,在redirect 中,url 更改为重定向的路由名称,而在return template 的情况下,url 不会更改。 2)通常,我在 tpl 文件中包含如下内容:<b>Hellp {{userName}}</b>。所以结果是 - Hello foo。如果我像你提到的那样从 url 传递变量,我可以在 tpl 中使用它们吗?
  • @ss2025 2) 我想是的,但是您可以随时尝试对您的页面使用重定向,看看它是否有效。
  • 是的,谢谢!这东西有效..但是除了把它放在url中之外还有其他方法吗?因为有很多这样的变量,我不想让网址看起来很复杂..
  • 您可以改用 POST 请求。见stackoverflow.com/questions/21087796/…
猜你喜欢
  • 2014-06-09
  • 2017-01-05
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 2010-12-09
  • 2014-04-09
相关资源
最近更新 更多