Django查看链接/重定向最佳实践

时间:2016-03-29 19:09:23

标签: python django

我正在构建一个以用户可以登录或注册的目标网页开头的应用。我有两种不同类型的用户,在成功登录后将被带到两个不同的仪表板页面(我知道哪种用户根据他们的凭据登录)。

我的问题是处理这种观点的最佳方法。我的登录视图具有告诉我获得哪种用户的逻辑,然后为该类型的用户仪表板正确呈现模板。但是,我还为每种仪表板提供了一个单独的视图,它以与登录视图中相同的方式呈现相同的模板 - 这是用户点击" home"按钮或你有什么。重复这样的逻辑似乎很愚蠢(现在每个仪表板都有两个网址 - '登录/'和' dashboard_x /'),所以我很好奇关于获取我的登录视图的最佳方式"重定向"根据收到的登录凭据到适当的仪表板视图。理想情况下,它只会检查用户的类型,然后将请求传递到正确的仪表板视图而不进行修改。

1 个答案:

答案 0 :(得分:1)

您可以简单地使用快捷方式库中的条件Django重定向?有文档here

类似的东西:

from django.shortcuts import redirect

def my_view(request):
    if something:
        return redirect('something-view')
    elif something_else:
        return redirect('something-else-view')
    else:
        # do something else

当然,您必须根据所使用的视图进行调整(基于类别/基于功能)。

如果您想使用相同的网址和视图,也可以使用查询参数执行切换:

def my_view(request):
    if something:
        return redirect('something-view', type='thing')
    elif something_else:
        return redirect('something-view', type='else')
    else:
        # do something else

然后测试你的东西 - 视图中的类型。它当然不是很安全(用户可以更改类型参数),因此您想要检查他们在某个视图中的用户类型,以确保他们不是试图查看他们不应该的版本。

最后,选项三是将它们重定向到同一个仪表板,并且它们仅依靠检查仪表板视图中的用户类型来确定向他们显示的内容。这是最安全的选择,因为逻辑保留在服务器上并且不在用户之外。控制 :)。这也是视图非常常见的习惯用法,例如,如果有当前用户,许多视图的行为会有所不同。