tornado如何停止当前的请求处理程序?

2024-06-16 13:50:09 发布

您现在位置:Python中文网/ 问答频道 /正文

有一些子类继承ManageHandler,每个子类都需要进行私有检查。 因此,我编写private_auth,让它在__init__中执行私有检查,并在GET/POST方法之前调用它。在

如果私密检查失败,只返回404错误。然而,这并不奏效。那么如何停止请求并返回错误页面呢?在

我的代码发布在下面:

class ManageHandler(BaseHandler):

    def __init__(self, *argc, **argkw):
        super(ManageHandler, self).__init__(*argc, **argkw)
        self.private_auth()


    def private_auth(self):
        self.user = self.get_secure_cookie("user")
        self.private = self.UserModel.get_user_level_by_name(self.user)

        #not login
        if self.private == -1:
            return 

        if self.private != 4:
            self.render("404.html")
            self.finish()


    @tornado.web.authenticated
    def get(self, argkw={}):
            pass

龙卷风报告这个错误。在

^{pr2}$

Tags: selfauthgetifinitdef错误private
1条回答
网友
1楼 · 发布于 2024-06-16 13:50:09

Tornado不是为在RequestHandler.__init__中执行身份验证和其他操作而设计的。这就是为什么从__init__调用self.finish时会出现异常:请求处理程序尚未准备好运行finish。在

相反,请重写get_current_user()。基本说明如下:

http://tornado.readthedocs.org/en/latest/web.html#tornado.web.RequestHandler.get_current_user

这里有一个例子:

http://technobeans.wordpress.com/2012/08/14/tornado-authentication/

get_current_user()中,不要设置self.user和{},只需返回一个元组。像这样:

def get_current_user(self):
    private = -1
    user = self.get_secure_cookie("user")
    if user:
        private = self.UserModel.get_user_level_by_name(self.user)

    return (user, private) if private == 4 else None

龙卷风会处理剩下的。在您的get()方法中,当前的(user, private)元组将设置在self.current_user中。在

相关问题 更多 >