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

Django: Block access to specific users in one app

我正在构建一个 Django 项目 demonstration,其构成中包含 3 个应用程序(应用程序、博客、前端)

我面临的挑战如下:

我想限制对应用程序的访问app只允许注册用户

换句话说,限制对 app django app.

中所有页面的访问

经过一些研究,偶然发现了以下链接:

  1. Link 1
  2. Link 2
  3. Link 3

Link 1中的答案似乎更容易实现。

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

在评论中询问:

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

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

任何人都可以向我解释我需要做什么才能限制对 django 应用程序中所有页面的访问,只允许注册用户

您的中间件位于何处由您决定,唯一重要的是它在您的 sys.path 中。

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

如何修复:

views.py 的内部,从 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

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