Pergunta

Eu escrevi uma página Django que requer apenas super-usuários de login. Então eu adicionei

foo_view = staff_member_required(foo_view)

mas não cortar, agora eu posso controlar apenas permitindo que o pessoal marcado usuários façam login, mas isso não cortar. Eu tentei algo como

def foo_view(request):
       if not request.user.is_superuser:
           #render some "not allowed page"
       #else render the page

mas não parece ajudar como me dando erros.

Foi útil?

Solução

Tente:

from django.contrib.auth.decorators import user_passes_test

def foo_view(request):
    # ...
foo_view = user_passes_test(lambda u: u.is_superuser)(foo_view)

Or (com Python> = 2.4):

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def foo_view(request):
    # ...

Outras dicas

O código que você sugeriu obras perfeito para mim, eu usei-o em muitos projetos desde Django 1.4:

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse

@login_required
def foo_view(request):
   if not request.user.is_superuser:
       return HttpResponse('The user is not superuser')

   # Do whatever you need to do

Este código funciona perfeito para mim desde Django 1,4-1,7, pelo menos.

respostas acima parece ser para versões muito precoces de Django. Eles são pouco complicado do que para a versão mais tarde

para Django 1.11 aqui é uma estratégia semelhante, mas mais simples bit. clique aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top