POST-данные только в том случае, если вы являетесь аутентифицированным пользователем - django rest framework

models.py

class OpeningHours(models.Model):
    day_of_week = models.IntegerField(choices=((0, 'Sunday'), (1, 'Monday'), (2, 'Tuesday'), (3, 'Wednesday'), (4, 'Thursday'), (5, 'Friday'), (6, 'Saturday')))
    opening_time = models.TimeField()
    closing_time = models.TimeField() 

serializer.py

class OpeningHoursSerializer(serializers.ModelSerializer):
    class Meta:
        model = OpeningHours
        fields = '__all__'
        read_only_fields = ("user",)

views.py

class OpeningHoursViewSet(viewsets.ModelViewSet):
    queryset = OpeningHours.objects.all()
    serializer_class = OpeningHoursSerializer
    authentication_classes = [CustomAuthentication]
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

authentication.py

class CustomAuthentication(authentication.BaseAuthentication):
    def authenticate(self, request):
        username = request.META.get('HTTP_USERNAME')
        if not username:
            return None
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            raise exceptions.AuthenticationFailed('No such user')
        return (user, None)

Я хочу, чтобы только аутентифицированный пользователь мог выполнять POST метод. Я установил ключ как HTTP_USERNAME и значение как имя пользователя (которое я создал в админке django) в заголовке postman перед выполнением post запроса, но я все равно получаю ошибку: "detail": "Authentication credentials were not provided." } Как мне решить эту проблему.

Вместо использования имени пользователя вы можете использовать jwt-аутентификацию и использовать его в качестве токена в заголовке и отправить post-запрос на сервер, где он будет обработан с помощью класса permissions, где он проверит токен и обработает запрос

Вы можете присоединиться к нашему дискорд-серверу, где мы делаем крутые проекты

https://discord.com/invite/yQxDSSevc8

Вернуться на верх