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

如何在Django REST Framework中创建自定义REST API并接入Swagger?

当然可以在Django REST Framework(DRF)中创建完全自定义的REST API,根本不需要绑定预定义模型的CRUD操作——你的临时方案其实没必要,下面是几种常用的实现方式:

一、基于函数视图的自定义API

用@api_view装饰器直接编写业务逻辑,完全脱离模型依赖。比如实现一个计算两数之和的接口:

from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(['GET'])
def add_numbers(request):
    a = int(request.query_params.get('a', 0))
    b = int(request.query_params.get('b', 0))
    return Response({'result': a + b})

在urls.py中配置路由:

from django.urls import path
from .views import add_numbers

urlpatterns = [
    path('add/', add_numbers, name='add-numbers'),
]
二、基于类视图的自定义API

继承APIView可以更灵活地支持多种HTTP请求方法,适合复杂的自定义逻辑:

from rest_framework.views import APIView
from rest_framework.response import Response

class TaskProcessor(APIView):
    def post(self, request):
        # 自定义业务逻辑:处理任务请求,无需关联数据库模型
        task_data = request.data
        processed_result = f"已处理任务: {task_data['name']}"
        return Response({'status': 'success', 'result': processed_result})

    def get(self, request):
        # 返回自定义状态信息
        return Response({'status': 'running', 'message': '任务处理器在线'})

路由配置:

path('task-processor/', TaskProcessor.as_view(), name='task-processor'),
三、让Swagger识别自定义API

如果使用drf-spectacular(DRF常用的Swagger集成库),只要给视图添加文档注释或专用装饰器,Swagger就会自动生成接口文档:

方式1:用注释定义文档

@api_view(['GET'])
def add_numbers(request):
    """
    计算两个整数的和
    ---
    parameters:
      - name: a
        type: integer
        required: true
        location: query
      - name: b
        type: integer
        required: true
        location: query
    responses:
      200:
        description: 计算结果
        schema:
          type: object
          properties:
            result:
              type: integer
    """
    a = int(request.query_params.get('a', 0))
    b = int(request.query_params.get('b', 0))
    return Response({'result': a + b})

方式2:用@extend_schema装饰器(更规范)

from drf_spectacular.utils import extend_schema, OpenApiParameter

@api_view(['GET'])
@extend_schema(
    parameters=[
        OpenApiParameter(name='a', type=int, required=True, description='第一个整数'),
        OpenApiParameter(name='b', type=int, required=True, description='第二个整数'),
    ],
    responses={200: {'type': 'object', 'properties': {'result': {'type': 'integer'}}}}
)
def add_numbers(request):
    a = int(request.query_params.get('a', 0))
    b = int(request.query_params.get('b', 0))
    return Response({'result': a + b})
总结

DRF的核心是提供RESTful API的工具链,模型CRUD只是其中一个常用场景,完全可以脱离模型实现任何自定义逻辑的API。你的临时方案虽然能运行,但会引入不必要的模型和数据库操作,改用上面的方式会更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:47:08