Похоже, вся проблема в том, что делать, если id
является недопустимой записью в data
.
Глядя на ваш код, особенно на приведенную ниже часть, кажется, что id
значение меньше 1 недопустимо.
if id < 1:
return Response({'message': 'Valid album id is required'})
Кроме того, try...except
означает, что, если id
не является частью data
, то это также недопустимо.
Это означает, что ваш код можно упростить, используя значения по умолчанию, например:
def post(self, request):
if len(request.body) > 0:
data = json.loads(request.body.decode('utf-8'))
else:
return Response({'message': 'Album id is required'})
id = int(data.get('id', 0))
if id < 1:
return Response({'message': 'Valid album id is required'})
album = Album.objects.get(pk=id)
# f-strings below are a python 3
return Response({'message': f'The album you have requested is {album}'})
Важная часть приведенного выше фрагмента: data.get('id', 0)
, которая возвращает data['id']
, если id
является допустимым полем, и 0, если id
не найден внутри data
Не имеет отношения, потому что оба являются допустимыми способами проверки request.body
, но более Pythoni c способ сделать это, как @ juanpa.arrivillaga предложил а именно: if request.body:
Чтобы еще больше упростить его, я бы уменьшил некоторые дубликаты, выполнив это следующим образом:
def post(self, request):
if request.body:
data = json.loads(request.body.decode('utf-8'))
id = int(data.get('id', 0))
if id < 1:
return Response({'message': 'Valid album id is required'})
album = Album.objects.get(pk=id)
# f-strings below are a python 3
return Response({'message': f'The album you have requested is {album}'})
return Response({'message': 'Album id is required'})