Django:需要条件登录的视图

Django:需要条件登录的视图,django,django-views,django-urls,Django,Django Views,Django Urls,给定视图,latest_objs,如果URL中有参数,我希望该视图需要有条件地登录 目标是: 如果传递的URL是latest objs,则返回与任何特定用户无关的objs非身份验证视图 如果传递的URL是最新的objs/mine,如果用户没有经过身份验证,我想要求登录,因为该版本的视图应该返回与经过身份验证的用户相关的objs 问题: 检查request.GET.GET('some-param')是否正确 如何在url.py文件中定义这两个场景?目前我有: url(r'latest-objs',

给定视图,
latest_objs
,如果URL中有参数,我希望该视图需要有条件地登录

目标是:

  • 如果传递的URL是
    latest objs
    ,则返回与任何特定用户无关的
    objs
    非身份验证视图

  • 如果传递的URL是
    最新的objs/mine
    ,如果用户没有经过身份验证,我想要求登录,因为该版本的视图应该返回与经过身份验证的用户相关的
    objs

  • 问题:

  • 检查
    request.GET.GET('some-param')是否正确
  • 如何在
    url.py
    文件中定义这两个场景?目前我有:

    url(r'latest-objs', views.latest_objs, name='latest_objs'),
    

  • 有点离题:我想知道是否值得为此费心,或者仅仅创建两个不同的视图。

    您使用
    请求。当您的URL有查询字符串时,获取
    ,例如
    /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):
        ...
    
    重用相同的视图还是不同的视图是一个判断问题,我认为这取决于视图。对于一个简单的视图,单独的视图将是最直接的,因为您可以使用登录所需的decorator或mixin来处理重定向。对于更复杂的视图,单独的视图可能会导致代码重复