Как выполнить любые запросы Django REST Framework с неизвестными параметрами? - PullRequest
0 голосов
/ 14 декабря 2018

Django REST Framework API игнорирует любые неизвестные параметры.Это привело к нескольким проблемам.Например, когда фильтр модели отсутствовал, клиент получал все записи, а не одну, которую они ожидали. Как заставить DRF возвращать 400 неправильных запросов всякий раз, когда вызов API включает неизвестный параметр?

(неизвестный параметр - это параметр, который отсутствует в [SerializerClass].Meta.fieldsесли это список, или нет в [SerializerClass].Meta.model полях, если это __all__.)

1 Ответ

0 голосов
/ 14 декабря 2018

Одним из простых и базовых решений может быть следующее:

# serializer.py

class FooSerializer(serializers.ModelSerializer):
    class Meta:
        model = Foo
        fields = '__all__'


# views.py
def foo_view(request):
    serializer = FooSerializer(data=request.data)
    if set(request.data.keys()) - set(serializer.fields.keys()):
        raise Exception

Примечание: Предполагается, что request.data является dict объектом


Отказ от ответственности: Я не уверен насчет случаев, когда мы используем source аргумент в сериализаторе

...