仅当您通过身份验证的用户时才发布数据 - django Rest Framework

问题描述 投票:0回答:1

模型.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() 

序列化器.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)

身份验证.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 admin 中创建),但我仍然收到错误:

“detail”:“未提供身份验证凭据。” }

我该如何解决这个问题?

python django django-rest-framework postman
1个回答
0
投票

您可以使用 jwt 身份验证并将其用作标头中的令牌,并向服务器发送发布请求,在服务器中将使用权限类来处理该请求,在该服务器中验证令牌并处理请求,而不是使用用户名

您可以加入我们的不和谐服务器,我们在那里做很酷的项目

https://discord.com/invite/yQxDSSevc8

© www.soinside.com 2019 - 2024. All rights reserved.