@EnotShow

Как правильно писать декораторы для Django DRF?

Пытаюсь написать декоратор для DRF, но при использовании декоратора получаю ошибку: "The view api.views.game.view didn't return an HttpResponse object. It returned None instead.", я так понимаю ошибка возникает, когда функция возвращает Response({'data': data}). Может кто сталкивался?

def api_auth_check(view_func):
    @wraps(view_func)
    def decorator_func(request, *args, **kwargs):
        try:
            token = request.headers['Token']
            find_token = SESSIONS.find_one({'token': token})['token']
            if token == find_token:
                view_func(request, *args, **kwargs)
        except Exception:
            return Response({'status': 'failed', 'message': 'unauthorized'})
    return decorator_func

@api_auth_check
@api_view(['GET'])
def test(request):
    return Response({'message': 'authorized'})


Видел еще вот такой подход, но для меня он тоже не работает: https://gist.github.com/ridvanaltun/6e3a7513519f99...
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
AlexNest
@AlexNest
Работаю с Python/Django
Для начала встречный вопрос: вместо готовых решений (Стандартный токен или JWT) использовать для авторизации в DRF сессии с самописными проверками - обоснованный шаг?
Касательно вопроса - давайте подумаем логически:
The view api.views.game.view didn't return an HttpResponse object. It returned None instead.

Здесь четко сказано, что вьюха ничего не вернула, хотя должна была вернуть HttpResponse. Оригинальная вьюха возвращает Response. Далее вопрос "на подумать": что возвращает декоратор, если не падет с исключением?
---
Видел еще вот такой подход, но для меня он тоже не работает:

"Не работает" - офигенное определение. Ну так почините.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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