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

如何在Django多应用间共享通用权限?

Django多应用通用权限的优化方案

针对你提到的多应用重复编写相同权限类的问题,有几种更高效的实现方式,彻底解决代码重复的问题:

1. 新建核心通用应用(推荐)

创建一个专门存放跨应用通用代码的Django应用(比如命名为core、common或utils),把通用权限类统一维护在这里,其他应用直接引用或基于此扩展。

具体操作:

  • 执行python manage.py startapp core创建核心应用(如果不需要数据库模型,可跳过migrations相关配置)
  • 在core/permissions.py中编写通用权限类:
from rest_framework.permissions import BasePermission

class ReadOnlyPermission(BasePermission):
    def has_permission(self, request, view):
        # 通用只读权限逻辑:仅允许GET/HEAD/OPTIONS请求
        return request.method in ('GET', 'HEAD', 'OPTIONS')
  • 在其他应用(如app1、app2)中直接导入使用,或根据需求继承扩展:
# app1/permissions.py
from core.permissions import ReadOnlyPermission

# 无需修改的话直接用ReadOnlyPermission即可
# 需要微调时,继承后重写对应方法
class App1ReadOnlyPermission(ReadOnlyPermission):
    def has_object_permission(self, request, view, obj):
        # 新增app1特有的对象权限判断
        return super().has_object_permission(request, view, obj) and obj.created_by == request.user

这种方式统一维护逻辑,修改一次所有应用同步生效,符合Django应用结构规范,适合中大型项目。

2. 项目根目录创建通用工具模块(轻量版)

如果不想新增Django应用,也可以在项目根目录建一个普通Python包(比如common),存放跨应用通用代码,无需注册到INSTALLED_APPS。

具体操作:

  • 在项目根目录新建common文件夹,添加__init__.py和permissions.py文件
  • 在common/permissions.py中编写通用权限类(代码同上述核心应用的权限类)
  • 其他应用中直接导入使用:
from common.permissions import ReadOnlyPermission

这种方式更轻量,适合小型项目或无数据库模型的通用代码场景。

注意事项

  • 确保导入路径正确,避免循环导入问题
  • 通用权限需微调时,优先用继承扩展,不要直接修改通用类,防止影响其他应用
  • 核心应用若无需数据库模型,可在core/apps.py中设置default_auto_field = None,并删除migrations文件夹,减少冗余配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:25:15