You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中PermissionRequiredMixin的继承顺序是否有要求?

Django 权限与登录验证Mixin的继承顺序问题

1. PermissionRequiredMixin 必须放继承列表首位

没错,你观察到的现象是对的——PermissionRequiredMixin必须放在继承列表的最左边。
Django类视图的父类方法(比如核心的dispatch)是按从左到右的顺序执行的。如果把它放在具体View类(比如TemplateView、ListView)后面,View类的dispatch会先执行,直接进入页面渲染流程,完全跳过权限验证,自然就出现“权限失效直接进页面”的问题。
只有把它放首位,才会先触发权限检查:

  • 用户未登录?自动跳转到登录页;
  • 已登录但无对应权限?返回403权限拒绝响应。

2. LoginRequiredMixin 的继承要求

LoginRequiredMixin只需要放在具体View类之前就行,位置不用像PermissionMixin那么严格。比如:

class MyView(LoginRequiredMixin, TemplateView):
    # 配置项...

这个顺序下,会先检查用户是否登录,未登录则跳转登录页,已登录才会执行后续页面渲染逻辑。

3. 同时继承两者的正确处理方式

当需要同时做登录验证和权限验证时,推荐的继承顺序是:
PermissionRequiredMixin → LoginRequiredMixin → 具体View类
示例代码:

class MyProtectedView(PermissionRequiredMixin, LoginRequiredMixin, TemplateView):
    permission_required = 'myapp.can_view_content'
    # 其他配置...

这个顺序的逻辑更顺畅:

  • 先执行权限检查,PermissionRequiredMixin内部会先判断用户是否登录,未登录直接跳转登录页;
  • 登录状态验证通过后,再检查权限,无权限则返回403;
  • 全部验证通过后,才会走到LoginRequiredMixin(此时用户已登录,直接通过)和View类的渲染逻辑。

当然反过来把LoginRequiredMixin放前面也能正常运行,但官方更推荐把权限相关的Mixin放在靠前位置——毕竟权限验证本身就包含了登录状态检查的逻辑,流程上更合理。

内容的提问来源于stack exchange,提问作者xcRt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:17:51