模型.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”:“未提供身份验证凭据。” }
我该如何解决这个问题?
您可以使用 jwt 身份验证并将其用作标头中的令牌,并向服务器发送发布请求,在服务器中将使用权限类来处理该请求,在该服务器中验证令牌并处理请求,而不是使用用户名
您可以加入我们的不和谐服务器,我们在那里做很酷的项目