我将Django Rest framework
与JavaScript应用结合使用。使用通用ModelViewSet
最重要的是,我想限制一张海报可以提交的内容 (只允许他们发布具有该用户的user_id的项目(会话的经过身份验证的用户)。
我不知道应该在何时/何地检查此事?这是验证问题吗? 我如何理解权限类是他们限制方法(Post / Get)或检查用户组。
item model
中的我的用户字段也是user model
的外键
所以可浏览的api在Html格式中建议下拉有关其他用户的信息。 (他们的电子邮件地址和其他一些领域)。
我的数据项看起来像这样
[{
"id": 792,
"name": "test",
"category": 1,
"value": 5,
"user": "33"
}]
这是我的Serializer和Viewset:
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id',
'name',
'category',
'value',
'user',
)
class ItemViewSet(viewsets.ModelViewSet):
serializer_class = ItemSerializer
def get_queryset(self):
return Item.objects.filter(user=self.request.user)
答案 0 :(得分:0)
首先将用户字段设置为只读:
# serializers.py
class ItemSerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField()
class Meta:
model = Item
fields = ('id',
'name',
'category',
'value',
'user',
)
然后在创建时自动设置用户ID:
# views.py
class ItemViewSet(viewsets.ModelViewSet):
serializer_class = ItemSerializer
def get_queryset(self):
return Item.objects.filter(user=self.request.user)
def perform_create(self, serializer):
serializer.save(user=self.request.user.customer)
只需使用standard permissions mechanism定义自定义帐号:
# permissions.py
from rest_framework import permissions
class IsOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return (request.user.is_authenticated() and
(obj.user == request.user.customer))
...并在您的视图集中使用它:
# views.py
from permissions import IsOwner
class ItemViewSet(viewsets.ModelViewSet):
permission_classes = [IsOwner]
...