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

如何将现有Django视图转换为适配Django REST Framework的接口视图

Django视图转DRF规范改造方案

改造步骤

  • 第一步:新建序列化器替换原生Django Form
    在你的应用目录下新建serializers.py文件,内容如下(字段需和你原有studentDetailsForm的字段保持一致,以下假设表单只有name字段):
from rest_framework import serializers

class StudentDetailsSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=255)
  • 第二步:改造视图适配DRF规范
    以下是改造成本最低的函数视图方案,同时兼容原有网页表单访问和API请求:
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework import status
from .serializers import StudentDetailsSerializer
from . import forms
from . import student_details_module
from django.shortcuts import render
from django.http import HttpResponseRedirect

# 如果你需要允许未认证用户发起POST请求,加这个权限装饰器
@permission_classes([AllowAny])
@api_view(['GET', 'POST'])
def student_details(request):
    # 兼容原有网页端访问逻辑,纯API场景可以直接删掉这部分
    if request.accepted_renderer.format == 'html':
        submitted = False
        if request.method == 'POST':
            form = forms.studentDetailsForm(request.POST)
            if form.is_valid():
                cd = form.cleaned_data
                return_message,return_code = student_details_module.show_data(cd['name'])
                return HttpResponseRedirect('/student_details?submitted=True')
        else:
            form = forms.studentDetailsForm()
            if 'submitted' in request.GET:
                submitted = True
        return render(request,
            'student_details.html',
            {'form': form, 'submitted': submitted}
            )

    # API逻辑,支持curl请求
    if request.method == 'POST':
        serializer = StudentDetailsSerializer(data=request.data)
        if serializer.is_valid():
            return_message, return_code = student_details_module.show_data(serializer.validated_data['name'])
            return Response(
                data={"message": return_message, "code": return_code},
                status=status.HTTP_200_OK if return_code == 0 else status.HTTP_400_BAD_REQUEST
            )
        return Response(
            data={"errors": serializer.errors},
            status=status.HTTP_400_BAD_REQUEST
        )
    # GET请求返回说明,按需调整返回内容
    return Response(
        data={"detail": "POST请求提交name参数即可查询学生信息"},
        status=status.HTTP_200_OK
    )
  • 第三步:测试验证
    路由不需要改动,直接用curl测试即可:
    curl -X POST -d "name=测试姓名" http://你的服务地址/student_details

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:18:03