defget(self, request, pk): obj=self.get_object() ser=self.get_serializer(instance=obj) returnResponse(ser.data) defput(self, request, pk): obj=self.get_object() ser=self.get_serializer(instance=obj, data=request.data) ifser.is_valid(): ser.save() returnResponse({'code':200,"data"...
def has_object_permission(self, request, view, obj): # 重写BasePermission的方法 """ 所有的request请求都有读权限,因此一律允许GET/HEAD/OPTIONS方法 如果用户是自己,可以修改 :param request: :param view: :param obj: :return: bool """ if request.method in permissions.SAFE_METHODS: return True #...
在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object()获取具体对象时,会进行对象访问权限的判断 DRF框架提供了四个权限控制类: AllowAny允许所有用户(默认的) IsAuthenticated仅通过认证的用户 IsAdminUser仅管理员用户 IsAuthenticatedOrReadOnly认证的用户可以完全操作,否则只能get读取 5.1使用 ...
1.get_queryset() 2.get_object() 3.get_serializer() 修改代码如下: 代码语言:javascript 复制 from rest_framework.views import APIView from utils.response import APIResponse from . import models, serializers ## GenericAPIView 是继承APIView的 ,完全兼容APIView from rest_framework.generics import ...
get_queryset获取当前视图所使用的查询集。 get_object从视图所使用的查询集中查询指定的对象,默认根据pk(查询)进行查询。 其他功能: a)过滤 b)分页 补充知识点: 查询的时候我们想不根据主键pk查询,而是根据我们的需求查,那么可以根据修改lookup_field(值改为我们要查询的字段的名称)的值来解决需求。
get_queryset获取当前视图所使用的查询集。 get_object从视图所使用的查询集中查询指定的对象,默认根据pk(查询)进行查询。 其他功能: a)过滤 b)分页 补充知识点: 查询的时候我们想不根据主键pk查询,而是根据我们的需求查,那么可以根据修改lookup_field(值改为我们要查询的字段的名称)的值来解决需求。
article = self.get_object(pk) article.delete() return Response(status=status.HTTP_204_NO_CONTENT) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ...
GenericAPIView继承APIView,在APIView的基础上又增加了一些功能。例如:get_queryset、get_object等 实际在开发中一般不会直接继承它,他更多的是担任中间人的角色,为子类提供公共功能。 2.URL编写方式为: fromdjango.urlsimportpath,re_path,includefromapp01importviewsurlpatterns=[path('api/users/',views.UserView....
ds = get_object_or_404(DataStructure, pk=id) old_ds = copy.copy(ds) # 此处重新定义了序列化器是因为文件传过来的时候为空,所以需要重新定义新的序列化器,先处理数据,再处理文件,exclude attachments字段可使该字段在处理数据时被忽略,最后在单独处理该字段 ...
使用self.get_object的时候,必须传入参数pk,并且必须使用有名路由进行映射!! urls.py path("book/<int:pk>/",BookDetailView.as_view())# 正确的路由方式1,并且必须命名为pkre_path("book/(?P<pk>\d+)/",BookDetailView.as_view())# 正则路由|正确的路由方式2,并且必须命名pkre_path("book/...