如何在self.redirect之后停止执行 [英] How to stop execution after self.redirect

查看:110
本文介绍了如何在self.redirect之后停止执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在请求初始化之后在 self.redirect 之后停止执行?



重定向方法不会停止/停止脚本执行。我的initilizer方法被调用,但进程继续进入方法 AnswerHandler.get() self.user 是None,因为用户

class BaseRequestHandler(webapp.RequestHandler):
def __init __( self):
self.user = None

def initialize(self,request = None,response = None):
super(BaseRequestHandler,self).initialize(request,response )

user = users.get_current_user()

如果不是用户:
返回self.redirect(users.create_login_url(request.uri))

self.user = user

class AnswerHandler(BaseRequestHandler):
$ b $ get get(self):
answer = Answer.next_answer_by_user(self.user )
self.write_template({answer:answer})

坦克! p>

解决方案

我会用这个解决方案:

  class BaseRequestHandler(webapp.RequestHandler):
def __init __(self):
self.user = None

def setAuthUser(self):
user = users.get_current_user()
如果不是用户:
self.redirect(users.create_login_url(request.uri))
return False
self.user = user
return True
$ b $ class AnswerHandler(BaseRequestHandler):
def get(self):
如果不是self.setAuthUser():
return
answer = Answer.next_answer_by_user(self.user)
self.write_template({answer:answer})

我知道你想要在每个处理程序中都有两行代码。



如果你真的想要的是,你的其他选择是:

$ p $ class BaseRequestHandler(webapp.RequestHandler):
def __init __( self):
self.user = None

def get (self):
self.user = users.get_current_user()
如果不是self.user:
self.redirect(users.create_login_url(request.uri))
return
self.doGet()

def doGet(self):
raise Exception(doGet()需要由子类实现)

class AnswerHandler(BaseRequestHandler):
def doGet(self):
answer = Answer.next_answer_by_user(self.user)
self.write_template({answer:answer})


How to stop execution after self.redirect in request initilization?

The method redirect does not stop/halt script execution. My initilizer method is called but the process continues into method AnswerHandler.get() but self.user is None because user is not logged.

class BaseRequestHandler(webapp.RequestHandler):
    def __init__(self):
        self.user = None

    def initialize(self, request=None, response=None):
        super(BaseRequestHandler,self).initialize(request, response)

        user = users.get_current_user()

        if not user:
            return self.redirect(users.create_login_url(request.uri))

        self.user = user

class AnswerHandler(BaseRequestHandler):

    def get(self):
        answer = Answer.next_answer_by_user(self.user)
        self.write_template({"answer" : answer})

Tanks!

解决方案

I would go with this solution:

class BaseRequestHandler(webapp.RequestHandler):
    def __init__(self):
        self.user = None

    def setAuthUser(self):
        user = users.get_current_user()
        if not user:
            self.redirect(users.create_login_url(request.uri))
            return False
        self.user = user
        return True

class AnswerHandler(BaseRequestHandler):
    def get(self):
        if not self.setAuthUser():
            return
        answer = Answer.next_answer_by_user(self.user)
        self.write_template({"answer" : answer})

I understand that you would like to work around having to have 2 lines of code in every handler.

If you really want that, your other option would be:

class BaseRequestHandler(webapp.RequestHandler):
    def __init__(self):
        self.user = None

    def get(self):
        self.user = users.get_current_user()
        if not self.user:
          self.redirect(users.create_login_url(request.uri))
          return
        self.doGet()

    def doGet(self):
        raise Exception("doGet() needs to be implemented by a subclass.")

class AnswerHandler(BaseRequestHandler):
    def doGet(self):
        answer = Answer.next_answer_by_user(self.user)
        self.write_template({"answer" : answer})

这篇关于如何在self.redirect之后停止执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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