Python 在Django中,如何限制is_工作人员访问URL?

Python 在Django中,如何限制is_工作人员访问URL?,python,django,python-3.x,Python,Django,Python 3.x,在我的网站中,用户和管理员用户都从前端登录。现在我想做的是,一些URL只能由公共用户访问。是_工作人员用户无法访问该URL。我该怎么做 更新: 我可以为此使用任何装饰器吗?您只需继承登录RequiredMixin并创建自己的自定义访问混合,如下所示: class AccessMixin(LoginRequiredMixin): def dispatch(self, request, *args, **kwargs): if not request.user.is_auth

在我的网站中,用户和管理员用户都从前端登录。现在我想做的是,一些URL只能由公共用户访问。是_工作人员用户无法访问该URL。我该怎么做

更新:

我可以为此使用任何装饰器吗?

您只需继承
登录RequiredMixin
并创建自己的自定义访问混合,如下所示:

class AccessMixin(LoginRequiredMixin):
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or request.user.is_staff:
            return self.handle_no_permission()
        return super().dispatch(request, *args, **kwargs)
class HomePageView(AccessMixin, TemplateView):
    login_url = <login-url>
    ...
    ...
现在您只需在视图中继承
AccessMixin
,如下所示:

class AccessMixin(LoginRequiredMixin):
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or request.user.is_staff:
            return self.handle_no_permission()
        return super().dispatch(request, *args, **kwargs)
class HomePageView(AccessMixin, TemplateView):
    login_url = <login-url>
    ...
    ...

这样,当您在模板中扩展base.html时,您在
{%block content%}{%endblock%}
中编写的所有内容将仅为非工作人员登录的用户呈现。

如果要使用装饰器,可以使用。首先定义一个测试函数,检查用户是否是工作人员

def is_not_staff(user):
    return not user.is_staff

您可以将函数更改为检查
user.is\u authenticated
user.is\u authenticated()
在Django中,我不知道您为什么要这样做?如果您的员工用户想要访问这些URL,他们可以直接注销(那么-登录时不让他们访问会有什么效果?).requirement在我的项目中使用此链接我们可以为此使用任何装饰器吗?无论您使用的是基于类的视图还是基于函数的视图,您都没有显示您的视图代码。但是,是的,您也可以使用装饰器来实现它,而不是子类化
LoginRequiremedMixin
,另一个选项是@Alasdair!同意,但我相信您需要编写在子类中也测试函数,因此也需要为其创建自定义mixin,以避免多次编写同一函数。