我有一个新应用:
newApp
有3个用户
[admin,user1,user2]
和一个登录页面(不是来自/ admin /)。是否可以限制/重定向对django管理员登录的访问?我想只是进入admin /路径,如果用户登录了IS和admin,这意味着如果im未登录也未以普通用户身份登录,则该目录不起作用。
答案 0 :(得分:0)
您可以编写一个自定义视图装饰器,以检查用户是否为admin,以及是否未引发Http404,例如:
def user_is_admin(function):
def wrap(request, *args, **kwargs):
if request.user.is_authenticated and request.user.is_admin:
return function(request, *args, **kwargs)
else:
raise Http404
return wrap
user.is_admin将是一个自定义实现,仅是一个示例。现在,您只需要包装视图即可
@user_is_admin
def my_view(request):
...
答案 1 :(得分:0)
我添加此答案是因为Pedro提供的答案无法回答我试图找出的部分,而不是让任何人访问/ admin /路径。
我用Django-Decorator-Include将其与Pedro的自定义装饰器混合
而我的urls.py上的结果是:
from decorator_include import decorator_include
from django.core.exceptions import PermissionDenied
def user_is_admin(function):
def wrap(request, *args, **kwargs):
if request.user.is_authenticated and request.user.is_staff:
return function(request, *args, **kwargs)
else:
raise PermissionDenied
return wrap
urlpatterns = [
.....
path('admin/', decorator_include([user_is_admin], admin.site.urls)),
.....
]