Django:在一个应用程序中阻止对特定用户的访问

时间:2017-03-06 11:58:58

标签: python django django-views django-apps django-middleware

我正在构建一个Django项目demonstration,其中包含3个应用程序(app,blog,frontend) enter image description here

我面临的挑战 如下:

我想限制对应用app的访问权限以仅允许注册用户

换句话说,限制访问app django app。

中的所有页面

在做了一些研究后,偶然发现了以下链接:

  1. Link 1
  2. Link 2
  3. Link 3
  4. Link 1中的答案似乎更容易实现。

    尽管如此,我还是遇到了一些问题,因为我在Django中使用Middleware的经验很少。

    在评论中询问

    '如果用户没有登录,我想限制一个名为app的应用的访问权限。中间件RequireLoginMiddleware类应该放在哪里?'

    但到目前为止还没有回复,我似乎没有办法解决这个问题。

    任何人都可以向我解释我需要做些什么才能限制访问django应用中的所有网页以仅允许注册用户

2 个答案:

答案 0 :(得分:1)

您的中间件存在取决于您,唯一重要的是它位于您的sys.path中。

另请注意,Best way to make Django's login_required the default中的中间件依赖于硬编码的网址(至少在settings中是硬编码的),这是一种DRY违规行为。这可以通过对reverse_lazy应用的每个网址使用app来解决,但此时您只需更快地使用app login_required视图进行装饰

答案 1 :(得分:1)

如何解决:

来自views.py app目录的app内部, 补充说:

from django.contrib.auth.decorators import login_required

并且,在调用视图之前:

@login_required(login_url="/admin/") #location where users are going to be able to do the login
def profile(request): #view

这意味着:一旦用户未登录并尝试访问该视图,他/她/它将被重定向到登录屏幕