龙卷风下一查询字符串的URL参数(Tornado next query string URL par

2019-10-19 01:51发布

由于龙卷风追加一个查询字符串参数,其中包含资源建设重定向URL的URL,有时我们可以在用户登录后或注销申请行重定向回其提交页面self.redirect(self.get_argument("next", "/"))

但是,当我使用下面的代码,它没有工作。 如果没有登录,访问页/测试时,它会重定向到/登录?接下来=%2Ftest,但参数下一总是空,它会被重定向到根页面 ,而不是/测试

我怎样才能解决这个问题呢?

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()

Answer 1:

get方法LoginHandler ,请使用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')

...


文章来源: Tornado next query string URL parameter