api_view装饰器不能与application / x-www-form-urlencoded

时间:2017-06-10 15:58:40

标签: python django django-rest-framework

我正在读一本关于django-rest-framework的书。

这是一个对我不起作用的特殊代码。请求数据字段为None

views.py

@api_view(['GET', 'POST'])
def cars_list(request, format=None):
    if request.method == 'GET':
        cars = CarModel.objects.all()
        cars_serializer = CarSerializer(cars, many=True)
        return Response(cars_serializer.data)

    elif request.method == 'POST':
        print(request.data.get('manufacturing_date'))
        car_serializer = CarSerializer(data=request.data)
        if car_serializer.is_valid():
            car_serializer.save()
            return Response(car_serializer.data, status=status.HTTP_201_CREATED)

    return Response(car_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

汽车模型有一个字段' manufacturing_date'我正在尝试打印

使用ModelSerializer创建CarSerializer

如果我使用curl提交POST而未提及"内容类型"默认情况下application/x-www-form-urlencoded,我看到请求对象是None

但是,这些是选项,支持所有3个解析器。

curl -iX OPTIONS http://localhost:8000/cars/3

输出:

{
  "name": "Car Detail",
  "description": "",
  "renders": [
    "application/json",
    "text/html"
  ],
  "parses": [
    "application/json",
    "application/x-www-form-urlencoded",
    "multipart/form-data"
  ]
}

我正在尝试打印请求数据,我得到了“无”。 基于print(request.data.get('manufacturing_date'))功能的视图中的cars_list

当我将内容类型设置为application/json

时,此功能正常

使用django-1.10和djangorestframework-3.6.3

之后我检查了文档 http://www.django-rest-framework.org/api-guide/parsers/ 并补充说 " parser_class"装饰器包括所有3个解析器,如下例所示:

@parser_classes((JSONParser,FormParser, MultiPartParser))

但仍然没有运气" form-urlencoded"数据

0 个答案:

没有答案