Django:使用条件login_required查看

问题描述 投票:0回答:1

鉴于视图,latest_objs,我希望视图有条件地登录,如果URL中有参数。

目标:

  1. 如果传递的URL是latest-objs,则返回与任何特定用户无关的objs的非身份验证视图。
  2. 如果传递的URL是latest-objs/mine,我想要在用户未经过身份验证时要求登录,因为该版本的视图应该返回与经过身份验证的用户相关的objs

问题:

  1. 这是检查request.GET.get('some-param')?的正确方法
  2. 我如何在urls.py文件中定义这两个场景?目前我有这个: url(r'latest-objs', views.latest_objs, name='latest_objs'),

有点偏离主题:我想知道是否值得为此烦恼,或者只是创建两个不同的视图。

django django-views django-urls
1个回答
1
投票

当您的网址有查询字符串时,您可以使用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):
    ...

您是否重复使用相同的视图或不同的视图是一个判断问题,在我看来,这取决于观点。对于一个简单的视图,单独的视图将是最直接的,因为您可以使用登录所需的装饰器或mixins来处理重定向。对于更复杂的视图,单独的视图可能会导致重复的代码。

© www.soinside.com 2019 - 2024. All rights reserved.