Возбуждение неверного запроса 400 исключение в ListAPIView - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь вызвать исключение 400, когда пользователь не предоставляет токен или когда токен недействителен, мой код ниже:

это мой файл exceptions.py:

from rest_framework.exceptions import APIException, PermissionDenied


class MissingTokenException(APIException):
    status_code = 400
    default_detail = 'Your request does not contain token'
    default_code = 'no_token'


class InvalidTokenException(APIException):
    status_code = 400
    default_detail = 'Your request contain invalid token'
    default_code = 'invalid_token'

это мой файл views.py:

class ListProductsOfCategory(generics.ListAPIView):
    serializer_class = ProductSerializer
    lookup_url_kwarg = 'category_id'

    def dispatch(self, *args, **kwargs):
        token = self.request.META.get("HTTP_TOKEN", "")
        if not token:
            # here I wan to raise an error saying that no token provided.
           raise MissingTokenException
        if not UserAccess.objects.filter(accessToken=token).exists():
            # here I wan to raise an error saying that token provided is not valid.
           raise InvalidTokenException
        return super().dispatch(*args, **kwargs)

    def get_queryset(self):
        category_id = self.kwargs.get(self.lookup_url_kwarg)
        return Product.objects.filter(category_id=category_id)

Я использую почтальон для проверки своих API:

enter image description here

пожалуйста, если кто-нибудь может помочь, я новичок в django и python.

1 Ответ

0 голосов
/ 05 ноября 2018

DRF обрабатывает большинство своих внутренних функций в функции dispatch , включая перехват APIException. Если вы хотите поднять APIException вне его - что и делает ваш код - вам также придется перехватывать исключение и вызывать обработчик исключения , как это делает DRF . Также обратите внимание, что вы пропустите переговоры по содержанию и некоторые другие вещи.

Лучший способ справиться с этим - выполнить проверку с помощью аутентификации и разрешений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...