Проверяйте авторизационный HTTP-заголовок каждого входящего запроса, Django

Я должен проверить авторизационный HTTP-заголовок каждого входящего запроса. В случае отсутствия или недействительности заголовка Authorization я должен вернуть ошибку с HTTP кодом 401 Unauthorized. Как сделать простую проверку заголовка авторизации?

мой код:

models.py

class Event(models.Model):
    name = models.CharField('the name of the event', max_length=255)
    created_at = models.DateTimeField(default=timezone.now, validators=[LessThanNowValidator()])
    additional_data = models.CharField(max_length=300, blank=True, default='')
    created_by = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.name}"


class CustomUser(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    api_token = models.CharField(max_length=100, blank=True, null=True, unique=True)

    def clean(self):
        self.api_token = Token.objects.create(user=self.user)

middleware.py

class MyMiddleware:

def __init__(self, get_response):
    self.get_response = get_response

def __call__(self, request):
    user_id = request.POST.get('created_by', False)
    try:
        api_token = CustomUser.objects.get(user=user_id).api_token
    except CustomUser.DoesNotExist:
        api_token = ''

    response = self.get_response(request)
    response['Authorization'] = "Bearer " + api_token
    return response

Я пытался написать валидацию в auth.py, но когда я пишу request.headers.get("Authorization",'') список пуст.

Пробовал что-то вроде этого:

auth.py

class BearerTokenAuthentication:

def get_bearer_token(self, request): **#DOEST WORK**

    auth = get_authorization_header(request).split() **#EMPTY LIST**
    auth_header_prefix = api_settings.BEARER_AUTH_HEADER_PREFIX.lower()

    if not auth or smart_text(auth[0].lower()) != auth_header_prefix:
        return None

    if len(auth) == 1:
        return False
    elif len(auth) > 2:
        return False

    return True

views.py:

@action(methods=['POST'], detail=False)
def post(self, request):
    if BearerTokenAuthentication.get_bearer_token(request): **#DOES NOT WORK**
        tutorial_serializer = EventSerializer(data=request.data)
        if tutorial_serializer.is_valid():
            tutorial_serializer.save()
            return Response(tutorial_serializer.data, status=status.HTTP_201_CREATED)
        return Response(tutorial_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

     else:
         return Response(status=status.HTTP_401_UNAUTHORIZED)

Я не думаю, что это лучший способ и считаю его некрасивым. Тем не менее, вот мое решение:

# i did this in views.py
class SomeView(View):
   def get(self, request):
      for key, value in request.header.items():
         # loop through the header...
Вернуться на верх