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

求助:基于DRF构建支持双文件与JSON字段的独立API

用DRF实现无模型的文件+JSON上传API

没问题!我帮你搞定这个DRF的API,不需要数据库模型,直接在运行时处理文件和JSON数据。下面是完整的实现步骤,一步一步来:

1. 编写序列化器(Serializer)

因为不需要关联数据库模型,我们直接用Serializer基类来定义字段。这里我特意加了JSON格式的验证,避免后续处理拿到无效的JSON数据:

from rest_framework import serializers
import json

class FileAndJsonSerializer(serializers.Serializer):
    # 定义两个不同名称的文件上传字段
    file1 = serializers.FileField()
    file2 = serializers.FileField()
    # 存储JSON字符串的文本字段
    json_data = serializers.CharField()

    def validate_json_data(self, value):
        # 验证输入字符串是否为合法JSON
        try:
            json.loads(value)
        except json.JSONDecodeError:
            raise serializers.ValidationError("输入的不是合法的JSON字符串,请检查格式")
        return value

2. 编写处理视图(View)

用APIView来处理POST请求,在视图里完成数据校验、文件读取和JSON解析,然后写你的运行时业务逻辑:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .serializers import FileAndJsonSerializer
import json

class FileJsonUploadView(APIView):
    def post(self, request, *args, **kwargs):
        # 校验请求数据
        serializer = FileAndJsonSerializer(data=request.data)
        if serializer.is_valid():
            # 从校验后的数据中提取内容
            file1 = serializer.validated_data['file1']
            file2 = serializer.validated_data['file2']
            json_str = serializer.validated_data['json_data']
            json_data = json.loads(json_str)

            # --------------------------
            # 这里替换成你的运行时处理逻辑
            # 示例:读取文件内容、打印数据
            file1_content = file1.read().decode('utf-8')
            file2_content = file2.read().decode('utf-8')
            print(f"已读取文件1: {file1.name},内容长度:{len(file1_content)}")
            print(f"已读取文件2: {file2.name},内容长度:{len(file2_content)}")
            print(f"解析后的JSON数据: {json_data}")
            # --------------------------

            # 返回成功响应
            return Response({
                "message": "文件和JSON数据处理完成",
                "file1_info": {"name": file1.name, "size": file1.size},
                "file2_info": {"name": file2.name, "size": file2.size},
                "parsed_json": json_data
            }, status=status.HTTP_200_OK)
        # 校验失败返回错误信息
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

3. 配置URL路由

在你的项目(或app)的urls.py里添加API路由:

from django.urls import path
from .views import FileJsonUploadView

urlpatterns = [
    # 这里的路径可以根据你的需求修改
    path('api/upload-files-json/', FileJsonUploadView.as_view(), name='file-json-upload'),
]

4. Postman测试要点

  • 请求方法选择POST,URL填写你的API地址(比如http://localhost:8000/api/upload-files-json/)
  • 请求体选择form-data格式
  • 添加三个字段:
    • file1:类型选择File,然后选择本地要上传的第一个文件
    • file2:类型选择File,选择第二个文件
    • json_data:类型选择Text,输入合法的JSON字符串(比如{"user": "cjahangir", "action": "upload"})
  • 发送请求,就能看到包含处理结果的成功响应了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:34:08