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

如何在Django Rest Framework中接收用户数据实现无数据库加法接口

问题原因
  • 序列化器字段不匹配:
    1. 字段名与入参JSON的键不对应,入参键为first number/second number,序列化器定义的是first/second,且Python变量名不支持空格,需要额外做字段映射
    2. 字段类型错误,用了CharField会把数值转为字符串,相加时会变成字符串拼接而非数值计算,应使用IntegerField
  • 序列化校验后取值方式错误:serializer.validated_data是字典类型,应使用方括号[]索引取值,现有代码用圆括号是把字典当作函数调用,会直接报错
  • 装饰器使用错误:@action是DRF中给ViewSet子类使用的路由装饰器,当前视图继承的是APIView,不需要加该装饰器,加了反而会导致路由匹配异常
  • 异常处理逻辑错误:except分支直接返回None,所有运行异常都会被静默吞掉,既无法定位问题,也不会给前端返回合法响应
  • 隐存的请求方法匹配问题:如果用POST请求传JSON,视图方法名需要和HTTP方法对应(如命名为post),否则无法正常接收请求
修复方案

1. 修改serializer.py

调整字段类型,增加字段映射匹配带空格的入参键:

from rest_framework import serializers

class AdditionSerializer(serializers.Serializer):
    first = serializers.IntegerField(source="first number")
    second = serializers.IntegerField(source="second number")

2. 修改views.py

去掉无效装饰器,修正取值逻辑,优化异常处理:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .serializer import AdditionSerializer

class AdditionView(APIView):
    # 接收POST请求,直接用post方法名对应HTTP POST
    def post(self, request):
        serializer = AdditionSerializer(data=request.data)
        if serializer.is_valid():
            first = serializer.validated_data['first']
            second = serializer.validated_data['second']
            response = {'result': first + second}
            return Response(response, status=status.HTTP_200_OK)
        else:
            # 把序列化错误信息返回,方便排查问题
            return Response({"message":"error", "details": serializer.errors}, status=status.HTTP_400_BAD_REQUEST)

3. 配置路由

在urls.py中注册对应路由即可,示例:

from django.urls import path
from .views import AdditionView

urlpatterns = [
    path('addition/', AdditionView.as_view(), name='addition'),
]

调用时向/addition/接口发送POST请求,携带要求的JSON参数即可得到{"result": 7}的返回结果,全程不需要操作数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:00:01