我在我的 Django 休息框架中使用了 Django 用戶模型。為此,我將 Django 的 ModelViewSet 用于我的 User 類。
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
序列化器.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'password']
extra_kwargs = {
'password' : {
'write_only':True,
'required': True
}
}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
Token.objects.create(user=user) # create token for the user
return user
但是目前來自郵遞員,當我使用一個用戶的令牌發出請求以查看、洗掉、編輯其他用戶時
http://127.0.0.1:8000/api/users/4/
它能夠編輯/洗掉/查看其他用戶。我不希望這種情況發生,一個用戶只能對自己提出請求就是我想要的。
這是我的應用程式 urls.py
網址.py
from django.urls import path, include
from .views import ArticleViewSet, UserViewSet
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('articles', ArticleViewSet, basename='articles')
router.register('users', UserViewSet, basename = 'users')
urlpatterns = [
path('api/', include(router.urls)),
]
當一個用戶發出 GET/POST/PUT/DELETE 請求時,如何防止他們訪問其他用戶。
編輯 1:添加 IsOwnerOfObject 類后,他在下面的回答中提供,現在當我請求用戶自己的詳細資訊時,我得到
未提供身份驗證憑據。

uj5u.com熱心網友回復:
如果你想完全禁用洗掉(這可能是正確的,因為如果你想“洗掉”一個用戶,你應該停用它。)然后你可以用這個替換你的視圖:
from rest_framework import viewsets
from rest_framework import generics
class UserViewSet(
generics.CreateModelMixin,
generics.ListModelMixin,
generics.RetrieveModelMixin,
generics.UpdateModelMixin,
generics.viewsets.GenericViewSet
):
queryset = User.objects.all()
serializer_class = UserSerializer
然后你可以使用Ene Paul的答案來限制誰可以編輯。
uj5u.com熱心網友回復:
創建一個名為permissions.py.
from rest_framework import permissions
class IsOwnerOfObject(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return obj == request.user
接下來將權限類添加到您的 ModelViewSet:
from yourapp.permissions import IsOwnerOfObject
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [IsOwnerOfObject, <other permission classes you want to use>]
更多資訊在這里:https : //www.django-rest-framework.org/tutorial/4-authentication-and-permissions/#object-level-permissions
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/330710.html
標籤:Python 姜戈 Django 休息框架 django 序列化器 django 用户
