Django - 想要将对所有这些功能的访问限制为仅登录用户,并且我已经拥有 100 个功能,他们是否可以直接添加它?

问题描述 投票:0回答:1

在Python-Django的views.py文件中,我有100个函数,我想将对所有这些函数的访问限制为仅登录用户。我知道我可以在每个函数上方添加“@login_required(login_url='/admin/login/')”并且效果很好。

但是由于功能较多,添加起来会相当麻烦。那么,有没有什么方法可以实现这一点,而无需手动将其添加到每个函数中。

非常感谢您的帮助。

@login_required(login_url='/member/login/')
def dashboard(request):
    id = request.user.id
    result = User.objects.get(pk=id)
    context={'result' : result}
    return render(request, 'member/dashboard.html', context)

我想将对所有这些内容的访问限制为仅登录用户。

python mysql django django-views django-templates
1个回答
0
投票

可能最简单的方法是使用一些中间件来做到这一点:

# app_name/middleware.py
from django.conf import settings
from django.contrib.auth.decorators import login_required


class LoginRequiredMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        self.restricted_get_response = login_required(
            get_response
        )

    def __call__(self, request):
        if request.path == settings.LOGIN_URL:
            return self.get_response(request)
        return self.restricted_get_response(request)

我们不想限制

/member/login/
路径,因为这样就无法登录了。

您需要添加中间件下方

AuthenticationMiddleware

# settings.py

# …

LOGIN_URL = '/member/login/'

# …

MIDDLEWARE = [
    # …,
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # …,
    'app_name.middleware.LoginRequiredMiddleware',
    # …
]
© www.soinside.com 2019 - 2024. All rights reserved.