Ash*_*hok 2 django django-permissions django-rest-framework
我正在尝试使用 Django rest 框架在我的 Django 应用程序中添加自定义权限。我创建了一个 API n 在邮递员中对其进行了测试,它对于经过身份验证的用户来说工作正常。但是当我访问详细信息视图时它不显示详细信息。例如,当我访问http://localhost:8000/placeslist/ 时,它会显示所有地方,但是当我尝试http://localhost:8000/placeslist/1/ 时,它说您没有权限。我不知道我哪里出错了
模型.py
class Places(BaseModel):
name = models.CharField(max_length=255,null=True,default='')
owner=models.ForeignKey('auth.User',related_name='place_list',on_delete=models.CASCADE,null=True)
Run Code Online (Sandbox Code Playgroud)
视图.py
class PlacesView(generics.ListCreateAPIView):
queryset = Places.objects.all()
serializer_class = PlacesSerializer
permission_classes = (permissions.IsAuthenticated, IsOwner)
def perform_create(self,serializer):
serializer.save(owner=self.request.user)
class PlacesDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Places.objects.all()
serializer_class = PlacesSerializer
permission_classes = (permissions.IsAuthenticated, IsOwner)
Run Code Online (Sandbox Code Playgroud)
权限.py
class IsOwner(BasePermission):
def has_object_permission(self, request, view, obj):
if isinstance(obj, Places):
return obj.owner == request.user
return obj.owner == request.user
Run Code Online (Sandbox Code Playgroud)
序列化器.py
class PlacesSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Places
fields =('id','name','owner')
Run Code Online (Sandbox Code Playgroud)
网址.py
url(r'^placeslist/$', PlacesView.as_view(), name="place"),
url(r'placeslist/(?P<pk>[0-9]+)/$',PlacesDetailView.as_view(),
name="place_details"),
url(r'^get-token/', obtain_auth_token),
Run Code Online (Sandbox Code Playgroud)
设置.py
....
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.TokenAuthentication',
)
}
....
Run Code Online (Sandbox Code Playgroud)
小智 5
那是因为您的自定义权限导致您尝试访问一个实例(Place with pk = 1),其中所有者不是您当前使用的用户。
检查那个地方的所有者。
您可以删除permissions.IsAuthenticated视图中的 ,因为您已经将它放在默认权限类中。
| 归档时间: |
|
| 查看次数: |
10165 次 |
| 最近记录: |