@776166

Как в __init__ DRF получить request?

from rest_framework import viewsets, status
from rest_framework.response import Response

class FooBarAPI(viewsets.ViewSet):
    def __init__(self, *args, **kwargs):
        """
        Тут мне нужна переменная requests из foo или любого другого эндпоинта. 
        Надо единообразно разобрать get-параметры
        """
        pass

    def foo(self, request, *args, **kwargs):
        print(request)
        return Response("foo", status=status.HTTP_200_OK)

    def bar(self, request, *args, **kwargs):
        print(request)
        return Response("bar", status=status.HTTP_200_OK)

Subj

Может, это можно принципиально сделать как-то по-другому.
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting
В DRF объект request доступен лишь в методах, которые выполняются при обработке запроса. В init методе доступ к request получить невозможно, так как init выполняется при создании экземпляра класса, а не при обработке запроса.

НО! Как вариант, можно создать метод, который будет выполняться перед запросом, например, использовать метод initial в классе ViewSet, например:

from rest_framework import viewsets, status
from rest_framework.response import Response


class FooBarAPI(viewsets.ViewSet):

    def initial(self, request, *args, **kwargs):
        super().initial(request, *args, **kwargs)
        self.query_params = getattr(request, 'query_params', {})  

    def foo(self, request, *args, **kwargs):
        print(self.query_params.get('param1')) 
        return Response("foo", status=status.HTTP_200_OK)

    def bar(self, request, *args, **kwargs):
        print(self.query_params.get('param2'))
        return Response("bar", status=status.HTTP_200_OK)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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