求助:基于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
相关产品推荐
相关产品推荐

