自定义权限类怎么写?3步搞定DRF精细化访问控制

第一章:DRF权限系统核心机制解析

Django REST Framework(DRF)的权限系统是构建安全、可控API的核心组件。它允许开发者在视图级别精确控制用户对资源的访问能力,确保只有具备相应权限的用户才能执行特定操作。

权限系统的基本工作原理

DRF的权限检查发生在请求进入视图之前,通过视图类中的 permission_classes 属性定义。每个权限类必须实现 has_permission 和/或 has_object_permission 方法,返回布尔值决定是否放行请求。
  • has_permission:针对整个视图的请求进行全局权限判断
  • has_object_permission:在获取具体对象后,决定用户是否有权操作该实例

常用内置权限类

权限类行为说明
AllowAny允许所有请求,无需认证
IsAuthenticated仅允许已登录用户访问
IsAdminUser仅允许管理员用户访问
IsAuthenticatedOrReadOnly已认证用户可读写,否则仅可读

自定义权限示例

以下代码展示如何创建一个仅允许对象所有者修改数据的权限类:

from rest_framework.permissions import BasePermission

class IsOwnerOrReadOnly(BasePermission):
    """
    自定义权限:仅允许对象的所有者编辑
    """
    def has_object_permission(self, request, view, obj):
        # 安全方法(GET、HEAD、OPTIONS)始终允许
        if request.method in ['GET', 'HEAD', 'OPTIONS']:
            return True
        # 写操作要求当前用户是对象的所有者
        return obj.owner == request.user
该权限类可在视图中通过 permission_classes = [IsOwnerOrReadOnly] 启用,有效保障数据隔离与安全性。

第二章:自定义权限类的设计原理与实现步骤

2.1 理解DRF权限模型:从源码看权限校验流程

权限系统的核心机制
Django REST Framework(DRF)的权限控制在视图执行前触发,核心逻辑位于 BasePermission 类。每个请求会调用 has_permission() 和 has_object_permission() 方法进行全局与对象级校验。
class IsOwnerOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.owner == request.user
上述代码定义了一个自定义权限类,允许所有人读取,但仅所有者可修改。SAFE_METHODS 包含 GET、HEAD 和 OPTIONS。
源码中的校验流程
DRF 在 GenericAPIView.check_permissions(self.request) 中执行权限检查,遍历 self.permission_classes 实例化后调用其 has_permission。
阶段方法调用说明
初始化instantiate实例化权限类列表
校验has_permission检查请求级别权限
对象级has_object_permission在获取对象后调用

2.2 定义基础自定义权限类:重写has_permission方法

在Django REST框架中,通过继承`BasePermission`类并重写`has_permission`方法可实现自定义权限控制。
核心实现逻辑
该方法接收`request`、`view`两个参数,返回布尔值决定是否允许访问。常用于全局级别权限判断。
from rest_framework.permissions import BasePermission

class IsOwnerOrReadOnly(BasePermission):
    def has_permission(self, request, view):
        # 认证用户才允许读写
        return request.user and request.user.is_authenticated
上述代码确保仅认证用户可访问视图,匿名用户将被拒绝。`request`包含当前请求上下文,`view`指向被访问的视图实例,便于结合业务逻辑动态授权。
权限决策流程
  • 请求进入视图前,先执行`has_permission`进行前置校验
  • 返回True则继续执行后续逻辑
  • 返回False则触发权限拒绝响应(HTTP 403)

2.3 细粒度对象级控制:实现has_object_permission方法

在Django REST framework中,`has_object_permission` 方法用于实现针对特定对象的细粒度权限控制。该方法在视图已经获取了具体对象实例后调用,允许根据用户与对象的关系进行更精确的访问控制。
方法调用时机
此方法仅在 `has_permission` 返回 `True` 后执行,确保先通过视图级权限,再进入对象级判断。
典型实现示例
def has_object_permission(self, request, view, obj):
    # 仅允许对象的所有者访问
    return obj.owner == request.user
上述代码中,`obj` 是待访问的模型实例,`request.user` 为当前请求用户。通过比对所有权关系,实现私有资源保护。
应用场景对比
场景使用方法判断依据
查看个人资料has_object_permissionuser == obj
编辑文章has_object_permissionuser == obj.author

2.4 结合用户角色与组策略的复合权限判断逻辑

在现代系统权限模型中,单一的角色或策略已难以满足复杂场景的安全控制需求。通过融合用户角色与组策略,可实现细粒度、多维度的访问控制。
权限判断的核心流程
系统首先解析用户所属角色,获取基础权限集;随后加载其所在用户组关联的组策略规则,进行权限叠加或限制。最终通过逻辑交集运算得出有效权限。
典型代码实现
// CompositePermissionCheck 执行复合权限校验
func CompositePermissionCheck(user *User) bool {
    rolePerms := GetRolePermissions(user.Role)        // 获取角色权限
    groupPolicy := GetGroupPolicies(user.Group)       // 获取组策略
    return EvaluatePolicy(rolePerms, groupPolicy)     // 联合判定
}
上述函数中,user.Role 决定基础操作范围,user.Group 引入上下文约束(如时间、IP限制),二者共同影响最终决策。
策略优先级示例表
角色组策略最终行为
开发者禁止生产环境写入仅读取权限
管理员启用审计日志全权操作+日志记录

2.5 权限类的注册与在视图中的应用方式

在 Django REST framework 中,权限控制是保障 API 安全的核心机制。通过自定义权限类并将其注册到视图中,可实现精细化的访问控制。
权限类的定义
from rest_framework.permissions import BasePermission

class IsOwnerOrReadOnly(BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in ['GET', 'HEAD', 'OPTIONS']:
            return True
        return obj.owner == request.user
该类继承自 BasePermission,重写 has_object_permission 方法,允许所有人读取数据,但仅所有者可修改。
在视图中应用权限
  • 通过 permission_classes 属性注册权限类
  • 支持多个权限组合,按顺序执行校验
from rest_framework.views import APIView

class PostDetail(APIView):
    permission_classes = [IsOwnerOrReadOnly]

    def put(self, request, pk):
        # 更新逻辑
        pass
请求进入时,框架自动调用权限类进行鉴权,失败则返回 403 状态码。

第三章:精细化访问控制实战场景剖析

3.1 实现仅本人可编辑自己的资源

在构建多用户系统时,确保用户只能操作自身资源是权限控制的核心需求之一。通过后端鉴权机制,可有效防止越权访问。
权限校验逻辑
每次更新资源的请求都需验证请求者身份与资源归属是否一致。通常在路由中间件中完成用户身份解析,并在业务逻辑层进行数据 ownership 校验。
func UpdateResource(c *gin.Context) {
    userID := c.MustGet("user_id").(string)
    resourceID := c.Param("id")

    var resource Resource
    db.First(&resource, resourceID)

    if resource.OwnerID != userID {
        c.JSON(403, gin.H{"error": "无权修改此资源"})
        return
    }

    db.Model(&resource).Updates(c.PostFormMap())
    c.JSON(200, resource)
}
上述代码中,userID 来自 JWT 解析结果,OwnerID 为数据库中资源的创建者标识。只有两者匹配才允许执行更新操作,从而实现“仅本人可编辑”的安全约束。

3.2 基于用户组和角色的多层级数据隔离

在复杂的企业系统中,数据安全依赖于精细化的访问控制。通过用户组与角色的分层设计,可实现多级数据隔离。
角色与权限映射
采用RBAC(基于角色的访问控制)模型,将权限绑定至角色,再将角色分配给用户组。例如:
// 定义角色权限结构
type Role struct {
    Name       string   `json:"name"`
    Permissions []string `json:"permissions"` // 如 ["read:finance", "write:hr"]
}
该结构支持动态权限校验。请求时通过中间件解析用户所属角色,并比对所需权限。
数据访问策略表
用户组可访问模块数据级别
财务组财务系统仅本部门
管理员全部全局
HR人事系统本组织+下属分支
通过策略表驱动数据过滤逻辑,确保查询自动附加行级安全条件。

3.3 动态权限控制:结合请求上下文灵活决策

在现代微服务架构中,静态角色权限已无法满足复杂业务场景。动态权限控制通过分析请求上下文(如用户属性、资源敏感度、访问时间等)实时做出授权决策。
上下文感知的权限判断逻辑
系统可基于策略引擎(如OPA)对请求元数据进行规则匹配:

package authz

default allow = false

allow {
    input.method == "GET"
    input.user.role == "admin"
}

allow {
    input.user.department == input.resource.owner_department
    input.time.hour >= 9
    input.time.hour < 18
}
上述 Rego 策略表明:管理员可读取任意资源;普通用户仅能在工作时间内访问本部门资源。input 携带完整请求上下文,实现细粒度控制。
典型应用场景
  • 基于地理位置限制数据导出
  • 敏感操作需多因素认证增强
  • 临时权限随会话上下文自动生效

第四章:高级特性与最佳实践指南

4.1 权限缓存优化:减少数据库查询开销

在高并发系统中,频繁查询数据库获取用户权限信息会导致性能瓶颈。引入缓存机制可显著降低数据库压力,提升响应速度。
缓存策略设计
采用 Redis 作为分布式缓存存储用户权限数据,设置合理的过期时间以平衡一致性与性能。当用户登录或权限变更时,主动更新缓存。
代码实现示例
// LoadPermissions 缓存用户权限
func LoadPermissions(userID int) ([]string, error) {
    key := fmt.Sprintf("permissions:%d", userID)
    val, err := redis.Get(key)
    if err == nil {
        return strings.Split(val, ","), nil
    }

    // 缓存未命中,查数据库
    perms, dbErr := queryDBPermissions(userID)
    if dbErr != nil {
        return nil, dbErr
    }

    // 写入缓存,有效期10分钟
    redis.Setex(key, strings.Join(perms, ","), 600)
    return perms, nil
}
上述代码优先从 Redis 获取权限列表,缓存未命中时回源数据库,并将结果写回缓存。通过 Setex 设置 TTL 防止数据长期滞留。
性能对比
方案平均响应时间数据库QPS
直连数据库45ms1200
启用缓存8ms120

4.2 与Django Guardian集成实现行级权限

Django Guardian 是一个轻量级的扩展库,为 Django 提供对象级别的权限控制能力。通过将用户权限绑定到具体数据库记录,可精确控制谁可以访问或修改某一行数据。
安装与配置
首先通过 pip 安装并注册应用:
pip install django-guardian
在 settings.py 中添加应用和匿名用户支持:
INSTALLED_APPS += ['guardian']
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'guardian.backends.ObjectPermissionBackend',
]
ANONYMOUS_USER_ID = -1
上述配置启用 Guardian 的对象权限后端,并设置匿名用户的默认 ID。
分配行级权限
使用 assign_perm 为用户赋予特定对象的操作权限:
from guardian.shortcuts import assign_perm
assign_perm('change_project', user, project_obj)
该代码表示允许指定用户修改某个具体的项目对象,权限判断可在视图中通过 has_perm('change_project', obj) 验证。 这种机制适用于多租户系统或用户隔离场景,实现细粒度的数据访问控制。

4.3 错误提示定制化:提升API用户体验

在构建RESTful API时,统一且语义清晰的错误响应能显著提升开发者体验。默认的HTTP状态码虽具通用性,但缺乏上下文信息,难以定位具体问题。
标准化错误响应结构
建议采用如下JSON格式返回错误信息:
{
  "error": {
    "code": "USER_NOT_FOUND",
    "message": "请求的用户不存在",
    "details": "用户ID '12345' 在系统中未找到",
    "timestamp": "2023-09-10T12:34:56Z"
  }
}
该结构包含错误码、可读消息、详细说明和时间戳,便于客户端处理与日志追踪。
错误分类与映射表
通过表格管理常见错误类型,提升维护性:
HTTP状态码错误码适用场景
400INVALID_PARAM请求参数校验失败
404RESOURCE_NOT_FOUND资源路径无效
500INTERNAL_ERROR服务端内部异常

4.4 权限测试策略:编写可靠的单元测试用例

在权限系统开发中,单元测试是保障逻辑正确性的核心手段。通过模拟不同角色的访问场景,可有效验证权限判断逻辑。
测试用例设计原则
  • 覆盖正常路径与边界条件,如无权限用户尝试敏感操作
  • 确保每个权限规则都有对应的正向和反向测试
  • 使用 mocks 隔离外部依赖,如数据库或认证服务
示例:基于角色的权限测试(Go)

func TestUserCanEditPost(t *testing.T) {
    admin := &User{Role: "admin"}
    editor := &User{Role: "editor"}
    post := &Post{AuthorID: 1}

    // 管理员应能编辑任意文章
    if !admin.CanEdit(post) {
        t.Error("Admin should edit any post")
    }

    // 编辑者仅能编辑自己的文章
    post.AuthorID = 2
    if editor.CanEdit(post) {
        t.Error("Editor should not edit others' posts")
    }
}
该测试验证了角色权限的核心逻辑:管理员拥有全局编辑权,而普通编辑仅限于自身内容。通过构造典型用户对象并调用权限方法,断言预期结果,确保业务规则不被破坏。

第五章:总结与扩展思考

性能优化的实际路径
在高并发系统中,数据库查询往往是瓶颈所在。通过引入缓存层(如 Redis)并结合本地缓存(如 Go 的 sync.Map),可显著降低响应延迟。

// 使用双层缓存策略减少数据库压力
func GetData(id string) (*Data, error) {
    if val, ok := localCache.Load(id); ok {
        return val.(*Data), nil // 本地命中
    }
    data, err := redis.Get(ctx, "data:"+id)
    if err == nil {
        localCache.Store(id, data) // 填充本地缓存
        return data, nil
    }
    return fetchFromDB(id) // 最终回源
}
架构演进中的权衡
微服务拆分需谨慎评估业务边界。某电商平台曾因过早拆分订单与库存服务,导致跨服务事务复杂化,最终引入 Saga 模式解决一致性问题。
  • 服务粒度应随业务增长逐步细化
  • 优先保证核心链路的低延迟与高可用
  • 异步通信宜采用消息队列解耦,如 Kafka 或 RabbitMQ
可观测性的实施要点
完整的监控体系包含日志、指标与链路追踪。以下为 Prometheus 监控项配置示例:
指标名称类型用途
http_request_duration_secondshistogram分析接口响应时间分布
db_connections_usedGauge监控数据库连接池使用率

生产环境典型架构:用户请求 → API 网关 → 认证服务 → 业务微服务 → 缓存/数据库集群

科技中介服务机构如何利用数智工具提升服务效率?.docx 科技中介服务机构如何利用数智工具提升服务效率? 立即下载

相关推荐

支付对账系统|Spring Cloud Alibaba微服务架构 分库分表+双边账比对引擎

一套基于 Spring Cloud Alibaba 的微服务支付对账系统完整工程,解决支付业务中"本地账与渠道账不一致"这一核心问题。技术栈为 JDK 8 + Spring Boot 2.7 + Spring Cloud 2021 + Nacos + OpenFeign + MyBatis-Plus + ShardingSphere 5.3 + Redisson + RocketMQ,共 8 个 Maven 模块、104 个 Java 文件、约 8800 行代码,含建表脚本与中间件编排文件。 工程按商户中心、渠道中心、结算中心、对账中心、调度中心、网关分层。核心实现有四块:一是双边账比对引擎,支持渠道单号优先、商户订单号回退的匹配主键,分位容差抹平,自动判定本地多单、渠道多单、金额不一致、状态不一致四类差异;二是差异处置策略,覆盖查单补偿、本地账补记、人工工单与挂账结转下期,并内置防资损约束——渠道查单接口失败时不判定为"渠道无此单",避免把超时误判成掉单而错误关闭已收款订单;三是分库分表落地,4 库 × 32 表,自定义按账期落表的分片算法,跨账期范围查询可精确裁剪表;四是渠道账单适配器,处理 GBK 编码、表头按列名定位、CSV 引号切分与金额元转分。网关侧实现了商户 HMAC-SHA256 签名验签加时间戳防重放、运营台 JWT 加登出黑名单双身份鉴权。另有雪花 ID、账期 T+N 计算、幂等切面、统一错误码与异常体系、对账任务状态机配分布式锁与乐观锁双保险。

权限控制难倒你?,深度解析Django REST Framework自定义权限策略

解决权限管理难题,掌握Python Django REST API自定义权限策略。适用于多角色系统、API安全控制场景,详解DRF权限类编写与验证机制,提升项目安全性与灵活性。方法实用,值得收藏。

LiteTrans的博客 727

科技中介服务机构如何实现服务流程的标准化与高效化?.docx

科技中介服务机构如何实现服务流程的标准化与高效化?

Django REST Framework 权限系统源码深度解析 ​​——BasePermission 的 has_permission() 调用链路全解​

权限认证BasePermission 的 has_permission() 调用链路源码解析

YAnt的博客 480

基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)

基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际上内容并未围绕Plecs或全桥LLC谐振变换器展开详细论述,而是罗列了大量基于Matlab/Simulink和Python的科研仿真项目标题及相关技术方向,涵盖电力系统、无人机控制、微电网优化、路径规划、状态估计、信号处理、电动汽车调度、电力电子变换器等多个领域。其中包括多种优化算法(如粒子群、遗传算法、NSGA-II)、控制策略(如PID、MPC、滑模控制)、仿真建模(如LLC谐振变换器、DAB变换器、PWM整流器)以及具体应用场景的研究实现。尽管提及“隔离型全桥LLC谐振变换器建模及参数设计资料”,但全文缺乏对该主题的具体描述、模型细节或仿真分析,仅作为条目之一出现。因此,该文档实质是一份科研项目资源清单或代码合集目录,而非针对某一主题的深入文章。; 适合人群:具备一定Matlab/Simulink或Python编程基础,从事电气工程、自动化、控制科学、电力电子、新能源系统等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①为科研工作者提供丰富的课题参考与复现资源,涵盖优化调度、控制系统设计、电力电子仿真等方向;②辅助完成硕士/博士论文、期刊论文复现、课程设计或项目开发,提升研究效率与创新性;③通过已有模型和代码快速搭建仿真平台,聚焦算法改进与性能优化。; 阅读建议:此文档应作为科研资源索引使用,读者可根据自身研究方向筛选相关条目,结合配套代码与参考资料进行深入学习与实践。对于希望研究全桥LLC谐振变换器的用户,需注意本文档未提供完整内容,建议查找标注的“仿真+设计报告+计算书”等附件资源以获取详细信息。

高校技术转移办公室在推动成果转化过程中,如何高效完成技术成果的信息整合与价值挖掘.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Django REST Framework教程(5): 认证(Authentication)与权限(Permission)初识

在前面教程中我们以博客为例,使用DRF开发了博客文章列表资源和单篇文章资源这两个API,支持客户端以各种请求方式对文章资源进行增删查改。然而目前的 API 对谁可以新建、编辑或删除文章资...

大江狗 2950

高校技术转移办公室人员,如何精准挖掘并分析企业的技术需求?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Django DRF 认证、权限、频率

在前面说的 APIView 中封装了三大认证,分别为认证、权限、频率。认证即登录认证,权限表示该用户是否有权限访问接口,频率表示用户指定时间内能访问接口的次数为了方便举例说明,事先定义好模型表 2. 认证 2.1 自定义认证 自定义登录认证可以生成随机字符串,并添加进 UserToken 表中,每一次登录都会生成,若该字符串已存在则更新,不存在则新建。登录视图函数 自定义认证表需要创建认证类,首先继承拓展 BaseAuthentication 导入语句:自定义认证类 2.1.1 全局使用 在配置文件中添加配

XWenXiang的博客 1047

隔离型全桥LLC谐振变化器建模及参数设计资料【仿真+设计报告+计算书】

内容概要:本文档是一套关于隔离型全桥LLC谐振变换器的综合性技术资料,系统涵盖了拓扑建模、参数设计、闭环控制策略及仿真验证等关键环节。资料整合了Simulink仿真模型、详细设计报告、Mathcad计算书以及控制算法说明文档,深入探讨了恒压恒流双闭环控制、变频与移相混合控制、软启动机制等核心技术,并提供了多应用场景实例,包括双向全桥LLC、多相交错LLC以及电动汽车V2G系统中的CLLC变换器设计。此外,配套资源还包含了多种先进控制与状态估计算法(如EKF、UKF、PF及其与神经网络融合算法)的Matlab实现代码,强化了科研复现与工程实践能力。; 适合人群:适用于电气工程、电力电子及相关专业的研究生、科研人员,以及从事高频开关电源、新能源变换器开发的工程师;需具备扎实的电路理论基础与一定的仿真软件操作经验。; 使用场景及目标:①支持全桥LLC变换器的高效参数设计与动态性能优化;②服务于高校或企业的科研项目,助力拓扑创新与控制系统开发;③作为毕业设计、学术论文或工业级产品原型开发的重要技术参考,提升系统效率、稳定性和响应速度。; 阅读建议:建议结合Simulink仿真模型与Mathcad计算书同步学习,重点关注谐振元件匹配、控制环路设计与系统稳定性分析,充分利用提供的Matlab/Simulink环境进行仿真调试与二次开发,深化理论认知与实际工程应用的融合。

三相交错并联Buck变换器+低纹波输出+双闭环控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink平台构建的三相交错并联Buck变换器仿真模型,重点实现了低输出纹波特性和双闭环控制策略。通过三相交错并联结构有效抑制输入与输出电流的纹波成分,显著提升电源系统的稳定性和电能质量;控制系统采用电压外环与电流内环相结合的双闭环架构,增强了系统的动态响应能力和抗干扰性能。资源包涵盖完整的Simulink仿真模型、技术说明文档及参考文献,具有较强的工程实践价值,适用于电力电子变换器的科研开发与教学实验。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校本科生、研究生及科研人员,尤其适合从事直流变换器拓扑结构与先进控制策略研究的专业人士,具备电路理论基础和Simulink仿真操作经验者更佳。; 使用场景及目标:①用于高效低纹波DC-DC变换器的拓扑创新与控制算法研究;②支撑科研项目中对多相并联技术与双闭环控制系统的性能验证;③作为课程设计、毕业设计或实验教学的技术范例,帮助深入理解交错并联的工作机理与闭环系统的设计方法。; 阅读建议:建议结合所提供的参考文献系统学习控制策略的理论依据,并动手调整仿真参数以观察系统在不同工况下的动静态响应特性,进一步掌握模型搭建、控制器设计与性能优化的全流程,强化理论与工程实践的融合能力。

DRF视图与路由进阶:从基础CRUD到复杂API架构设计

在Web API开发中,视图和路由是构建RESTful服务的核心骨架。视图层负责处理请求逻辑、数据序列化与业务验证,其设计模式直接影响代码的可维护性和扩展性。路由系统则定义了API端点的组织结构与访问路径,是API设计意图的直观体现。从技术价值看,良好的视图与路由设计能显著提升开发效率、保障API安全性,并支持复杂的业务场景如多角色权限控制、嵌套资源操作等。在Django REST framework(DRF)中,开发者通过视图类继承体系(如APIView、GenericAPIView、ViewSet)和路

weixin_33778544的博客 321

产业园区运营负责人如何依托平台系统提升科技资源的集聚与转化效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Django drf权限使用

源码流程 和认证的流程一样,进入initial(request) 其中check_permissions(request)是权限的函数 check_permissions中的has_permission()(要复写)就是权限函数(get_permissions循环所有权限类) Permisson自定义权限类 has_permission自定义权限 True, 有权限 False, 无...

Ginta的博客 411

高校技术转移办公室如何提升技术成果的精准推介效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员在成果推介过程中,如何提升推介材料的专业性与吸引力.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

drf中添加django自带用户登录认证

在drf中添加django自带的用户认证来鉴权用户 drf中需要先建自定的has_permission 将这个鉴权类引入到所需项目的viewset中 将django自带的auth,User体系功能代码引入到自定义鉴权中 在url中定义三个用户鉴权方法路由(注册,登录,退出登录) urlpatterns = [ path('drf/', include(router.urls)), path('login/', user_login.login), path('register/'

chenGL 1515

uniapp自定义tabbar闪屏?3步搞定原生tabbar隐藏+自定义占位(附完整代码)

本文针对UniApp开发中自定义TabBar切换页面闪烁的痛点,提供了一套根治方案。通过隐藏原生TabBar并利用自定义组件进行视觉占位,巧妙结合原生切换的无闪烁优势与自定义设计的灵活性。文章详细解析了闪屏根源,并附上完整的page.json配置与代码实现,帮助开发者彻底解决此问题,提升小程序应用质感。

postgres8guard的博客 1530
上一篇: Python迭代器的__next__实现:5个你必须掌握的核心要点与实战案例
下一篇: 还在用numpy.where?Pandas的mask方法让你效率翻倍!
simcode
博客等级 码龄14年 154粉丝 2026原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值