[Python] "detail": "Authentication credentials were not provided." django-rest_framework

Discussão em 'Python' iniciado por Stack, Abril 17, 2025.

  1. Stack

    Stack Membro Participativo

    I`m making my own pet project, and I need do permissions for users. When user register and create item, only he/she can delete/change item.

    But when I make a permission, next login from user account and try to create an item, I get an error (get method works).

    views.py:

    from .permissions import IsOnwerOrReadOnly

    class CreateItemView(APIView):

    serializer_class = CreateItemSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsOnwerOrReadOnly]

    def post(self, request):
    serializer = self.serializer_class(data=request.data)
    serializer.is_valid(raise_exception=True)
    serializer.save(owner=self.request.user)
    return Response(_('item created successfully'), status=status.HTTP_201_CREATED)

    def get(self, request, pk, format=None):
    item = [item.name for item in CreateItem.object.all()]
    description = [item.description for item in CreateItem.object.all()]
    type_item = [item.type_item for item in CreateItem.object.all()]
    price = [item.price for item in CreateItem.object.all()]
    return Response({'name':item[pk], 'description':description[pk],
    'type_item':type_item[pk], 'price':price[pk]}, status=status.HTTP_200_OK)

    def patch(self, request, pk):
    instance = get_object_or_404(CreateItem, id=pk)
    serializer = CreateItemSerializer(instance, data=request.data, partial=True)
    serializer.is_valid(raise_exception=True)
    serializer.save()
    return Response(_("item updated successfully"), status=status.HTTP_200_OK)

    def delete(self, request, pk):
    item = CreateItem.object.get(id=pk)
    item.delete()
    return Response(_("item deleted successfully"), status=status.HTTP_204_NO_CONTENT)


    permissions.py:

    from rest_framework import permissions

    class IsOnwerOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
    if request.method in permissions.SAFE_METHODS:
    return True
    return obj.owner == request.user


    urls.py (items_app)

    from .views import CreateItemView
    from django.urls import path
    urlpatterns = [
    path('item-create/', CreateItemView.as_view(), name='item-create'),
    path('item-create/<int:pk>', CreateItemView.as_view(), name='item-create'),
    ]


    urls.py (auth_app):

    from django.urls import path
    from .views import (RegisterUserView, VerifyUserEmail, LoginUserView,
    PasswordResetRequestView, PasswordResetConfirmView, SetNewPasswordView,
    LogoutView)

    urlpatterns = [
    path('register/', RegisterUserView.as_view(), name='register'),
    path('verify-email/', VerifyUserEmail.as_view(), name='verify'),
    path('login/', LoginUserView.as_view(), name='login'),
    path('password-reset/', PasswordResetRequestView.as_view(), name='password-reset'),
    path('password-reset-confirm/<uidb64>/<token>/', PasswordResetConfirmView.as_view(), name='password-reset-confirm'),
    path('set-new-password/', SetNewPasswordView.as_view(), name='set-new-password'),
    path('logout/', LogoutView.as_view(), name='logout')
    ]


    Auth and items are in different apps

    Continue reading...

Compartilhe esta Página