Django:带条件login_required的视图

时间:2018-09-05 09:23:07

标签: django django-views django-urls

鉴于视图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'),
    

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

1 个答案:

答案 0 :(得分:1)

当您的URL带有查询字符串(例如, request.GET

对于URL /latest-objs?owner=me,您必须修改URL模式或添加新的URL模式。我更喜欢添加一个新的URL模式,因为我认为它更具可读性。您可以使用新视图,

/latest-objs/mine

或使用同一视图,然后将url(r'latest-objs/mine', views.my_objs, name='my_objs'), 传递到该视图,以便您可以知道匹配了哪个URL模式。

mine

如果您采用后一种方法,则需要更新视图以接受url(r'latest-objs/mine', views.latest_objs, {'mine': True}, name='my_objs'), 作为参数。

mine

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