【问题标题】:limit some users to only one page in Django将某些用户限制为 Django 中的一页
【发布时间】:2012-10-13 04:16:57
【问题描述】:

我想知道如何将特定用户的访问权限限制在他们登录后只能访问一个页面。

我的用户模型中有

deactivated = models.BooleanField(default=False)

如果用户已登录并且他们的帐户已停用,我只想向他们显示停用页面。我不想让他们去网站上的任何其他地方,除非他们再次激活他们的帐户。 实现它的最佳和最简单的方法是什么?

编辑:我负担不起浏览所有视图并为其附加装饰器。

【问题讨论】:

    标签: django django-authentication


    【解决方案1】:

    如果您不想使用装饰器方法,最好的办法是编写middleware 来检查request.user 是否已激活,然后重定向(到他们可以重新激活帐户的页面)必要时。

    大概你会想要这样的东西:

    from django.shortcuts import redirect
    
    
    class DeactivatedRedirectMiddleware(object):
    
        def process_request(self, request):
            if request.user and not request.user.is_anonymous():
                if request.user.deactivated and request.get_full_path() != '/some/url/':
                    # redirect here
                    return redirect('/some/url/')
            # ...
    

    【讨论】:

    • 好吧,我想这行得通。但现在我处于重定向循环中。因为即使去/some/url/ 也会重定向我。
    • @dado_eyad 您可以在重定向之前检查request.path 是否为/some/url/
    • @dado_eyad 不客气 :) 确保测试更多边缘案例以确保涵盖某些边缘案例 :)
    【解决方案2】:

    您可以使用装饰器功能检查用户是否被激活并重定向他。 How to write a custom decorator in django?

    【讨论】:

      【解决方案3】:

      使用视图装饰器。

      关于它的好文章:http://passingcuriosity.com/2009/writing-view-decorators-for-django/

      【讨论】:

      • 我有很多意见。我不想遍历每个人并为其附加装饰器。
      猜你喜欢
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 2011-12-02
      • 1970-01-01
      相关资源
      最近更新 更多