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, где он проверит токен и обработает запрос
Вы можете присоединиться к нашему дискорд-серверу, где мы делаем крутые проекты