當客戶端提交帶有無效JSON的請求時,應該如何構造基於函數的視圖以返回HTTP 400?訪問請求時Django REST框架ParseError.DATA
REST框架Request documentation指出在訪問包含無效JSON的request.DATA
時可能會引發ParseError
。文檔繼續指出,如果使用@api_view
修飾視圖函數,則會捕獲該錯誤,並將HTTP 400錯誤請求返回給客戶端。
在我創建的意見,當我訪問request.DATA
我收到一個HTTP 500 ParseError
,而不是預期的HTTP 400
我的看法是結構是這樣的:
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from serializers import PersonSerializer
@api_view(['POST'])
def person_list(request):
# Deserialize the incoming JSON into a Person object.
# FIXME: ParseError raised here if JSON is invalid!
person = PersonSerializer(data=request.DATA)
# Ensure that the request contains valid data.
if not person.is_valid():
return Response(person.errors, status=status.HTTP_400_BAD_REQUEST)
# Save the Person object into the Mongo backend.
person.save()
return Response(person.data, status=status.HTTP_201_CREATED)
我的串行器的結構是這樣的:隨着模型由提供我沒有使用ModelSerializer
from rest_framework import serializers
class PersonSerializer(serializers.Serializer):
name = serializers.CharField()
surname = serializers.CharField()
age = serializers.IntegerField()
def restore_object(self, attrs, instance):
"""Given a dictionary of deserialized field values or create a new
model instance.
"""
return Event(**attrs)
注不是Django ORM。
如果我發送一個無效的JSON字符串的視圖(例如,張貼沒有任何內容)或使用該字符串:{"name": "Alice", "surname" "Test", "age": 30}
(注意失蹤冒號:
"surname"
後)Django會返回一個HTTP 500:
ParseError at /people/
No exception message supplied
即使我嘗試並訪問request.DATA
而不將它傳遞給PersonSerializer
會引發。
任何幫助,將不勝感激。