我的webapp有两个用户'角色':' Designer '和' Programmer '。
应用程序的首页由以下人员处理:
class Front(BaseHandler):
def get(self):
role = self.get_user_role() #somehow gets the current user role.
if role == 'Designer':
#redirect to DesignerFront(BaseHandler)
elif role == 'Programmer':
#redirect to ProgrammerFront(BaseHandler)
class DesignerFront(BaseHandler):
# do something
class ProgrammerFront(BaseHandler):
# do something
我目前有一个处理两个角色查询的处理程序,我认为这可能会造成不必要的代价。
是否可以将流程转发到不同的处理程序,如上例所示?另外,这是推荐的吗?也许有一种更好的方法可以做到这一点,我不知道。
我将不胜感激任何帮助。谢谢。
答案 0 :(得分:0)
您可以将HTTP 307重定向返回到DesignerFront或ProgrammerFront网址。
这是可以接受的。您通常不希望经常重定向,因为它会降低性能(用户必须请求Front页面,重定向,然后转到相应的页面)。如果用户在访问您的网站时只遇到过这种情况,那就没那么重要了。
答案 1 :(得分:0)
继续发表评论。您可以直接调用处理程序,在许多情况下,这将优先于重定向。
最大的原因是简化您的安全模型。如果您根据用户角色重定向,则必须在特定于用户的处理程序中再次执行安全检查,因为任何人都可以猜测处理程序URL。通过直接调用处理程序,您已经执行了检查,只需在一个位置执行和维护它。
您可以执行以下操作
class Front(BaseHandler):
def get(self):
role = self.get_user_role() #somehow gets the current user role.
if role == 'Designer':
dh = DesignerFront(self.request,self.response)
dh.get()
elif role == 'Programmer':
#redirect to ProgrammerFront(BaseHandler)
我没有对我的任何项目使用webapp(2),我发现这些路由不适合开放式URL方案以及其他一些URL映射工具/库(至少对我的项目而言)。
在我们较大的项目中,用户视图由许多依赖于上下文(他们在哪里),他们的角色(他们是谁)等的部分组成......所以顶级URL只提供容器视图,并且然后我们基于(request.type,context,user,view)相应的组件进行查找以填充页面的各个部分,因此顶级视图定义了调用上下文和所有权限,然后查找/获取各种找到的组件。 (我不会在这里详细介绍,因为它可能会分散您的注意力并引入更多不熟悉的框架)。