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

如何为URL模式与HTTP方法的组合添加标签并提取信息?

实现Django类视图端点的标签提取方案

1. 在类视图上定义方法标签属性

直接在你的GetBrand类视图中添加类属性method_labels,用来映射每个视图动作(比如list、create)对应的标签列表:

from rest_framework.viewsets import ModelViewSet

class GetBrand(ModelViewSet):
    # 键为视图动作名,值为对应标签列表
    method_labels = {
        'list': ['get-brand', 'brand-management'],
        'create': ['create-brand', 'brand-management']
    }

    # 你的视图核心逻辑(如queryset、serializer_class)
    queryset = Brand.objects.all()
    serializer_class = BrandSerializer

2. 编写端点信息提取函数

通过遍历Django的URL解析器,结合类视图的标签属性,生成你需要的结构化数据:

from django.urls import get_resolver
from rest_framework.views import APIView

def get_endpoint_info():
    endpoint_list = []
    resolver = get_resolver()
    api_prefix = "api/"  # 根据项目实际URL前缀调整

    for pattern in resolver.url_patterns:
        # 跳过嵌套URL配置(如include引入的子路由),如需处理可添加递归逻辑
        if hasattr(pattern, 'url_patterns'):
            continue
        
        callback = pattern.callback
        # 仅处理DRF的APIView类视图实例
        if isinstance(callback, APIView):
            view_class = callback.__class__
            action_map = callback.action_map  # 获取HTTP方法到动作的映射(如{"get": "list"})
            url_path = f"{api_prefix}{pattern.pattern}".rstrip('^$')  # 清理正则符号,得到实际路径

            for http_method, action_name in action_map.items():
                # 从类视图中获取对应动作的标签,默认返回空列表
                labels = view_class.method_labels.get(action_name, [])
                endpoint_list.append({
                    "label": labels,
                    "method": http_method.upper(),
                    "url": f"{url_path}/"  # 保持和示例一致的路径格式
                })
    
    return endpoint_list

3. 使用提取函数

调用get_endpoint_info()即可得到目标格式的端点数据:

# 示例调用
endpoints = get_endpoint_info()
print(endpoints)
# 输出结果将完全匹配你给出的格式

注意事项

  • URL前缀处理:如果API前缀是通过include设置的(比如path('api/', include('your_app.urls'))),可以修改提取函数,通过递归遍历嵌套URL模式自动拼接前缀,无需手动配置api_prefix。
  • 动作名匹配:确保method_labels中的键与action_map里的动作名完全一致(比如list、create、retrieve等),否则会返回空标签列表。
  • 扩展兼容:如果需要支持普通Django View类,可以调整判断逻辑,同时在对应视图类中定义方法与标签的映射关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:42:23