我用Django编写了一个API服务。我已经授权用户通过 django 管理面板仅列出客户端。 当我使用我授权的用户名进入 django 管理面板时,授权没有问题。
但是当我访问 api 服务时,他从未看到权威。
你可以帮我吗?
API/权限.py
from rest_framework.permissions import BasePermission
class IsOwner(BasePermission):
def has_permission(self, request, view):
return request.user and request.user.is_authenticated
message = "you cannot change data that you do not own !"
def has_object_permission(self, request, view, obj):
return (obj.user == request.user) or request.user.is_superuser
views.py
class CustomerListAPIView(ListAPIView):
serializer_class = CustomerCreateSerializer
permission_classes = [IsOwner]
filter_backends = [SearchFilter]
search_fields = ['customerName', 'customerSurname', 'customerIdentityNo']
def get_queryset(self):
queryset = Customer.objects.filter(user=self.request.user)
return queryset
settings.py
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissions'
]
}
朋友
当我运行 api 时,它根本不输入">has_object_permission"。只有当我使用用户帐户从管理面板登录时,它才会进入"has_object_permission"。 当我运行 API 时,它永远不会进入"has_object_permission"。
- 首先,检查您是否在请求中获得了用户,您可以按照我上面所说的那样通过在返回字符串上方的 IsOwner 权限中添加
print(request.user)
来执行此操作。 - 测试当您向 API 发出请求时,您是否在请求中获得了用户(我猜是从浏览器?
- 如果函数将 prone 为"无",则需要在授权标头中添加 JWT 令牌。基本上,这就是 JWT 的工作方式。通常需要在请求的授权标头中添加字符串(在设置 + 中定义的某个代码字(JWT/令牌(,以便 API 会将您标识为特定用户。
- 您可以从不同的服务中执行此操作。例如,我通常使用邮递员服务来测试并向我的 API 发出请求。你可以在这里找到它: https://www.getpostman.com/
我写这个作为答案,因为评论长度不够。