Django:有条件地查看 login_required
Django: View with conditional login_required
给定视图 latest_objs
,如果 URL 中有参数,我希望视图有条件地要求登录。
目标:
如果传递的URL是latest-objs
,则return与objs
不关联任何特定用户的非认证视图。
如果传递的 URL 是 latest-objs/mine
,我想在用户未通过身份验证时要求登录,因为该版本的视图应该是 return objs
与经过身份验证的用户相关。
问题:
- 这样做的正确方法是检查
request.GET.get('some-param')?
如何在我的 urls.py
文件中定义这两种情况?目前我有这个:
url(r'latest-objs', views.latest_objs, name='latest_objs'),
有点跑题:我想知道是否值得为此烦恼,或者只是创建两个不同的视图。
当您的 URL 有查询字符串时,您使用 request.GET
,例如/latest-objs?owner=me
.
对于 URL /latest-objs/mine
,您必须修改 URL 模式,或添加一个新模式。我更喜欢添加一个新的 URL 模式,因为我认为它更具可读性。您可以使用新视图,
url(r'latest-objs/mine', views.my_objs, name='my_objs'),
或使用相同的视图,并将 mine
传递给视图,以便您可以判断匹配了哪个 URL 模式。
url(r'latest-objs/mine', views.latest_objs, {'mine': True}, name='my_objs'),
如果您采用后一种方法,则需要更新视图以接受 mine
作为参数。
def latest_objs(request, mine=False):
...
是否重用相同的视图或不同的视图是一个判断问题,在我看来,这取决于视图。对于一个简单的视图,一个单独的视图将是最直接的,因为您可以使用需要登录的装饰器或混合来处理重定向。对于更复杂的视图,单独的视图可能会导致重复代码。
给定视图 latest_objs
,如果 URL 中有参数,我希望视图有条件地要求登录。
目标:
如果传递的URL是
latest-objs
,则return与objs
不关联任何特定用户的非认证视图。如果传递的 URL 是
latest-objs/mine
,我想在用户未通过身份验证时要求登录,因为该版本的视图应该是 returnobjs
与经过身份验证的用户相关。
问题:
- 这样做的正确方法是检查
request.GET.get('some-param')?
如何在我的
urls.py
文件中定义这两种情况?目前我有这个:url(r'latest-objs', views.latest_objs, name='latest_objs'),
有点跑题:我想知道是否值得为此烦恼,或者只是创建两个不同的视图。
当您的 URL 有查询字符串时,您使用 request.GET
,例如/latest-objs?owner=me
.
对于 URL /latest-objs/mine
,您必须修改 URL 模式,或添加一个新模式。我更喜欢添加一个新的 URL 模式,因为我认为它更具可读性。您可以使用新视图,
url(r'latest-objs/mine', views.my_objs, name='my_objs'),
或使用相同的视图,并将 mine
传递给视图,以便您可以判断匹配了哪个 URL 模式。
url(r'latest-objs/mine', views.latest_objs, {'mine': True}, name='my_objs'),
如果您采用后一种方法,则需要更新视图以接受 mine
作为参数。
def latest_objs(request, mine=False):
...
是否重用相同的视图或不同的视图是一个判断问题,在我看来,这取决于视图。对于一个简单的视图,一个单独的视图将是最直接的,因为您可以使用需要登录的装饰器或混合来处理重定向。对于更复杂的视图,单独的视图可能会导致重复代码。