반응형
django @login_required 수퍼 유저 용 데코레이터
사용자가 수퍼 유저인지 테스트하는 @login_required와 유사한 데코레이터가 django에 있습니까?
감사
user_passes_test데코레이터 사용 :
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.is_superuser)
def my_view(request):
...
직원 멤버십이 충분하다면 @staff_member_required데코레이터를 사용할 수 있습니다 .
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def my_view(request):
...
@staff_member_required와 유사한 기능을 원한다면 자신 만의 데코레이터를 쉽게 작성할 수 있습니다. @staff_member를 예로 들어 다음과 같이 할 수 있습니다.
from django.contrib.admin.views.decorators import user_passes_test
def superuser_required(view_func=None, redirect_field_name=REDIRECT_FIELD_NAME,
login_url='account_login_url'):
"""
Decorator for views that checks that the user is logged in and is a
superuser, redirecting to the login page if necessary.
"""
actual_decorator = user_passes_test(
lambda u: u.is_active and u.is_superuser,
login_url=login_url,
redirect_field_name=redirect_field_name
)
if view_func:
return actual_decorator(view_func)
return actual_decorator
이 예제는 수정 된 staff_member_required이며 람다에서 한 번의 확인 만 변경했습니다.
클래스 기반 뷰의 경우 재사용 가능한 데코레이터 생성 :
from django.contrib.auth.mixins import UserPassesTestMixin
from django.views.generic import View
def superuser_required():
def wrapper(wrapped):
class WrappedClass(UserPassesTestMixin, wrapped):
def test_func(self):
return self.request.user.is_superuser
return WrappedClass
return wrapper
@superuser_required()
class MyClassBasedView(View):
def get(self, request):
# ...
참고 URL : https://stackoverflow.com/questions/12003736/django-login-required-decorator-for-a-superuser
반응형
'developer tip' 카테고리의 다른 글
| Swift에서 간단한 페이드 인 애니메이션을 만드시겠습니까? (0) | 2020.11.01 |
|---|---|
| STL의 벡터에 맵 값 복사 (0) | 2020.10.31 |
| Android Studio에서 수동으로 ADB를 다시 시작하는 방법 (0) | 2020.10.31 |
| 업데이트 패널 포스트 백 후 JavaScript 콜백을 실행하는 방법은 무엇입니까? (0) | 2020.10.31 |
| 행렬에서 주어진 값의 요소 수를 어떻게 계산할 수 있습니까? (0) | 2020.10.31 |