@nurzhannogerbek

Как изменить JSON результат в POST запросе | DRF?

Помогите пожалуйста разобраться. Для меня не совсем понятно как организовать контроллер в моем конкретном случаи.

В проекте на Django REST Framework есть простая модель данных и сериализатор.

models.py:
class Article(models.Model):
    body = models.TextField()


serializers.py:
class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ('id', 'body')


Предположим у меня есть такие данные в базе данных.

ID | BODY
-----------------------------------------------------------------------
1  | Aki doing his homework about japanese robot in library.
2  | All chapters are accompanied by necessary links.
3  | Japanese robot Aki doing a lot of tasks.


Я пытаюсь отправить JSON через POST запрос на контроллер ArticleFilterView.

curl -X POST -H "Content-Type: application/json" -d 
'[{
    "first": ["Aki", "robot"], 
    "second": ["doing", "library"]
}]'
http://localhost:8000/api/article/filter/


Пытаюсь сделать так, чтобы контроллер вернул JSON, в котором были бы все статьи в текстке которых есть слова "Aki" и "robot". При этом из текста убрать слова "doing" и "library", если они есть.

Input:
[{
    "fisrt": ["Aki", "robot"], 
    "second": ["doing", "library"]
}]


Output:
[ 
    {"id": 1, "body": "Aki his homework about japanese robot in ."},
    {"id": 3, "body": "Japanese robot Aki a lot of tasks."},
]


views.py:
class ArticleFilterView(APIView):
    parser_classes = (JSONParser,)

    def post(self, request, format=None):
        result = {}
        print(request.data)
        return Response(data=result)


Для начало я пытался просто запустить контроллер, чтобы посмотреть получает ли он на входе JSON, но он выдает такую ошибку:
Internal Server Error: /api/article/filter/
Traceback (most recent call last):
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/nurzhan_nogerbek/PycharmProjects/bookworm/bookworm_venv/lib/python3.6/site-packages/rest_framework/views.py", line 483, in dispatch
    response = self.handle_exception(exc)
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/rest_framework/views.py", line 443, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/rest_framework/views.py", line 471, in dispatch
    self.initial(request, *args, **kwargs)
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/rest_framework/views.py", line 389, in initial
    self.check_permissions(request)
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/rest_framework/views.py", line 321, in check_permissions
    for permission in self.get_permissions():
  File "/home/nurzhan_nogerbek/PycharmProjects/ArticleWorld/bookworm_venv/lib/python3.6/site-packages/rest_framework/views.py", line 268, in get_permissions
    return [permission() for permission in self.permission_classes]
TypeError: 'type' object is not iterable


Был бы очень признателен, если кто-нибудь подсказал и указал в каком направлении копать.
  • Вопрос задан
  • 617 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы