【问题标题】:Django view chaining/redirecting best practicesDjango 视图链接/重定向最佳实践
【发布时间】:2016-07-17 12:37:50
【问题描述】:

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

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

【问题讨论】:

    标签: python django


    【解决方案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
    

    当然,您必须根据您使用的视图类型(基于类/基于函数)进行调整。

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

    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
    

    然后在你的东西视图中测试类型。这当然不是很安全(用户可以更改类型参数),因此您需要再次检查他们在某物视图中的用户类型,以确保他们没有试图查看他们应该看到的版本t.

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

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      相关资源
      最近更新 更多