Tornado 下一个查询字符串 URL 参数
Posted
技术标签:
【中文标题】Tornado 下一个查询字符串 URL 参数【英文标题】:Tornado next query string URL parameter 【发布时间】:2013-11-29 16:30:34 【问题描述】:问题
由于 Tornado 附加了一个下一个查询字符串参数,其中包含构建重定向 URL 的资源的 URL,有时我们可以在登录或注销应用行 @987654321 后将用户重定向回引用页面@
但是当我在下面的代码中使用它时,它不起作用。 不登录,访问Page /test时,会重定向到/login?next=%2Ftest,但参数next总是为空,它将被重定向到 根页面 而不是 /test。
我该如何解决这个问题?
代码
import os
import tornado.wsgi
import tornado.web
import tornado.options
import tornado.ioloop
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
return self.get_secure_cookie("user")
class MainHandler(BaseHandler):
@tornado.web.authenticated
def get(self):
self.render('index.html', user = self.current_user)
class LoginHandler(BaseHandler):
def get(self):
if self.get_current_user():
self.redirect('/')
return
self.render('login.html')
def post(self):
self.set_secure_cookie("user", self.get_argument("username"))
self.redirect(self.get_argument('next', '/'))
class LogoutHandler(BaseHandler):
def get(self):
if not self.get_current_user():
self.redirect('/')
return
self.clear_cookie("user")
self.redirect(self.get_argument("next", "/"))
class TestHandler(BaseHandler):
@tornado.web.authenticated
def get(self):
self.write("Testing!)
settings =
"static_path" : os.path.join(os.path.dirname(__file__), "static"),
"template_path" : os.path.join(os.path.dirname(__file__), "templates"),
"login_url" : "/login",
"cookie_secret" : "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=",
"gzip" : True,
"debug" : True,
application = tornado.web.Application([
(r"/", MainHandler),
(r"/login", LoginHandler),
(r"/logout", LogoutHandler),
(r"/test", TestHandler),
], **settings)
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
【问题讨论】:
【参考方案1】:在LoginHandler
的get
方法中,使用next
参数进行重定向
...
class LoginHandler(BaseHandler):
def get(self):
if self.get_current_user():
self.redirect(self.get_argument('next', '/')) # Change this line
return
self.render('login.html')
...
【讨论】:
我不明白为什么get
方法需要这个。用户输入凭据,post
方法处理它并进行重定向。但是为什么get
方法需要它呢?
@avi 当用户导航到您的登录表单页面(例如从您的公共主页上的“登录”链接)并且您希望自动重定向登录用户时,这很有用
我还是不明白。用户访问需要登录的受保护页面。他将被重定向到登录表单,下一个参数包括受保护的页面。他输入登录名,它将由登录处理程序方法的 POST 处理并进行重定向。登录的 GET 在这里出现在哪里?
@avi 假设用户已经登录,但不知何故他再次导航到登录页面。应该发生什么?您不应该为他呈现登录表单,因为他是经过身份验证的用户!这就是为什么。以上是关于Tornado 下一个查询字符串 URL 参数的主要内容,如果未能解决你的问题,请参考以下文章