在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)
我想将对所有这些内容的访问限制为仅登录用户。
可能最简单的方法是使用一些中间件来做到这一点:
# 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',
# …
]