龙卷风下一个查询字符串URL参数 [英] Tornado next query string URL parameter
问题描述
由于 Tornado 追加了下一个查询字符串参数,该参数包含构建重定向URL的资源的URL,因此有时我们可以在登录或注销后通过应用行
Since Tornado append a next query string parameter, which contain the URL of the resource building the redirect URL, sometimes we can redirect the user back to the referring page after login or logout applying line self.redirect(self.get_argument("next", "/"))
但是当我在下面的代码中使用它时,它不起作用. 如果不登录,则访问页面/test 时,它将重定向到/login?next =%2Ftest ,但是参数 next 始终为null,并且它将重定向到根页面,而不是/test .
But when I use this in the following code, It didn't work. Without login, when visiting Page /test, it will redirect to /login?next=%2Ftest, but the parameter next is always null and it will be redirect to root page instead of /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()
推荐答案
在LoginHandler
的get
方法中,使用next
参数进行重定向
In the get
method of LoginHandler
, use the next
argument for the redirect
...
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')
...
这篇关于龙卷风下一个查询字符串URL参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!