Django permission_required 데코레이터가 로그인 한 사용자를 로그인 페이지로 리디렉션하지 않도록하려면 어떻게해야합니까? 불충분 한 권한 ?Django permission_required 데코레이터가 이미 로그인 한 사용자를 로그인 페이지로 리디렉션하지 않고 메시지를 표시 할 수있는 방법은 무엇입니까?
감사합니다.
Django permission_required 데코레이터가 로그인 한 사용자를 로그인 페이지로 리디렉션하지 않도록하려면 어떻게해야합니까? 불충분 한 권한 ?Django permission_required 데코레이터가 이미 로그인 한 사용자를 로그인 페이지로 리디렉션하지 않고 메시지를 표시 할 수있는 방법은 무엇입니까?
감사합니다.
빠르고 더러운 해결책은 자신의 데코레이터를 작성하여이 작업을 수행하는 것입니다. 이런 식으로 뭔가 : 그런 다음 이렇게보기를 장식 할 수
decorator_with_arguments = lambda decorator: lambda *args, **kwargs: lambda func: decorator(func, *args, **kwargs)
@decorator_with_arguments
def custom_permission_required(function, perm):
def _function(request, *args, **kwargs):
if request.user.has_perm(perm):
return function(request, *args, **kwargs)
else:
request.user.message_set.create(message = "What are you doing here?!")
# Return a response or redirect to referrer or some page of your choice
return _function
:
@custom_permission_required('my_perm')
def my_view(request, *args, **kwargs):
#Do stuff
장고 이후 1.4 permission_required
은 True로 설정할 수 raise_exception
매개 변수가 무단 PermissionDenied 예외가
예 : 클래스를 기반으로보기상의 exemple을 제공 :
from django.contrib.auth.decorators import permission_required
...
class MyView(TemplateView):
@method_decorator(permission_required('can_do_something', raise_exception=True))
def dispatch(self, *args, **kwargs):
return super(MyView, self).dispatch(*args, **kwargs)
참조 :
from django.utils import six
from django.core.exceptions import PermissionDenied
from django.contrib.auth.decorators import user_passes_test
def permission_required(perm, login_url=None, raise_exception=True):
def check_perms(user):
if isinstance(perm, six.string_types):
perms = (perm,)
else:
perms = perm
if user.has_perms(perms):
return True
if raise_exception and user.pk:
raise PermissionDenied
return False
return user_passes_test(check_perms, login_url=login_url)
을 그리고 같은 방법을 사용 permission_required decorator doc
I 사용자가 기록되지 않은 경우에도 사용자가 리디렉션되기를 원한다고 생각하십시오. 로그인하지 않은 사용자는 리디렉션되지 않습니다. – theicfire
당신은 장고의 permission_required
장식을 대체하기 위해 자신의 장식을 쓸 수 있습니다 :
@permission_required('app.permission')
def view_page(request):
# your view function
로그인 한 사용자가 허용하지 않음 이온은 403 금지 된 오류를 얻을 것입니다. 로그인하지 않은 사용자는 로그인 페이지로 리디렉션됩니다. 나는이 질문을 믿고있어
는 두 가지
이미 리디렉션하지 않는 로그인 페이지로 로그인하지 않은@Manoj Govindan의 대답도 @ Stefano의 대답도 작동하지 않습니다. @ Lidor의 대답은 효과가 있지만 그는 permission_required
함수를 완전히 다시 구현했습니다. 사용자가 로그인하지 않은 경우, 그들은 리디렉션됩니다,이와
@login_required
@permission_required('hi there', raise_exception=True)
def blah(request):
pass
:
여기 간단한 방법이다. 그 (것)들은이고 그러나 허가가없는 경우에, 그들은 아래로 과실 일 것이다.
그 request.user.message_set.create()는 실제로 Django의 내장 함수인가 아니면 단지 가상의 예제입니까? –
@PaulLo : Django에 내장 된'User' 모델은 메시지 인스턴스를 생성 한'message_set.create()'함수를 가지고 있습니다. 그것이 아직도 있는지 확실하지 않습니다. –
Django의 공식 사이트를 살펴 보았습니다. uesr.message_set은 1.2 이후 사용되지 않았으며 대신 메시지 프레임 워크를 사용하는 것이 좋습니다. https://docs.djangoproject.com/en/1.3/ref/contrib/messages/ –