龙卷风下一个查询字符串URL参数 [英] Tornado next query string URL parameter

查看:87
本文介绍了龙卷风下一个查询字符串URL参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

推荐答案

LoginHandlerget方法中,使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆