Django 视图链接/重定向最佳实践
Posted
技术标签:
【中文标题】Django 视图链接/重定向最佳实践【英文标题】:Django view chaining/redirecting best practices 【发布时间】:2016-07-17 12:37:50 【问题描述】:我正在构建一个应用程序,该应用程序从用户可以登录或注册的登录页面开始。我有两种不同类型的用户,他们在成功登录后将被带到两个不同的仪表板页面(我根据他们的凭据知道哪种用户正在登录)。
我的问题是关于处理这种观点的最佳方式。我的登录视图具有告诉我得到哪种用户的逻辑,然后为该用户的仪表板正确呈现模板。但是,我还为每种仪表板提供了一个单独的视图,它以与登录视图相同的方式呈现相同的模板——这是用于当用户单击“主页”按钮或你有什么时。重复这样的逻辑似乎很愚蠢(而且现在每个仪表板都有两个 URL - 'login/' 和 'dashboard_x/'),所以我很好奇让我的登录视图“重定向”到基于收到的登录凭据的正确仪表板视图。理想情况下,它只检查用户类型,然后将请求传递到适当的仪表板视图而不进行修改。
【问题讨论】:
【参考方案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.
最后,选项三是将它们重定向到同一个仪表板,它们仅依靠检查仪表板视图中的用户类型来确定向它们显示的内容。这是最安全的选项,因为逻辑保存在服务器上并且不受用户控制:)。这也是视图的一个非常常见的习惯用法,例如,如果当前用户是否存在,许多视图的行为会有所不同。
【讨论】:
以上是关于Django 视图链接/重定向最佳实践的主要内容,如果未能解决你的问题,请参考以下文章