如何在self.redirect之后停止执行 [英] How to stop execution after 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屋!