2013-06-20 129 views
0

我试图将我的网站代码重构成更优雅的东西。CherryPy网站设计

我当前的代码设置如下:

class Root(object): 
    def __init__(self): 
     ... 

    def require_token(token, redir): 
     if token != cherrypy.session["token"]: 
      self.redirect(redir, "Bad token") 

    def require_logged_in(redir): 
     if not self.logged_in(): 
      self.redirect(redir, "Must be logged in") 

    @cherrypy.expose 
    def index(self): 
     ... 

    @cherrypy.expose 
    def login(self, username, password, return_to): 
     self.login_user(username, password) 
     self.redirect(fix_url(return_to)) 

    @cherrypy.expose 
    def logout(self, token, return_to): 
     self.require_token(token, fix_url(return_to)) 
     self.logout_user() 
     self.redirect(fix_url(return_to)) 

    @cherrypy.expose 
    def member_area_query(self, query): 
     self.require_logged_in("/") 
     if not self.test_query(query): 
      self.redirect(current_page, "Query failed.") 
     ... 

    ... 

一个很大的烦恼是,我必须手动绕过我想重定向到的页面。

  • 如果它是一个会员专区页面,用户不再登录,我想重定向到“/”
  • 对于登录和注销要重定向到的return_to参数
  • 否则,重定向应该去请求同一个页面(关于这一点我显示错误消息)

所以我的问题是:

  • 我怎么能b etter定义页面重定向到?
  • CherryPy有没有内置的东西可以帮助我?
  • 我可以使用装饰器来存储要重定向到的默认页面吗?或者调用require_ *函数?
  • 任何CherryPy工具都可以提供帮助吗?
+0

您可以将代码更改为不传递位置的位置,只需将其指向/的重定向即可。 – debianplebian

回答

0

如果他们还没有登录,他们可能只是做这样的事情:

def not_logged_in(): 
    self.redirect('\', "Must be logged in") 

我不能谈论的CherryPy本身,但我认为所有的代码需要的是打破了几的功能。