8个方法,接下来一个个分析 类属性 queryset = None serializer_class = None lookup_field = ‘pk’ lookup_url_kwarg = None...如果没什么逻辑,可以直接写在视图的类属性中,如果逻辑比较复杂,也可以重写get_queryset方法用来返回一个queryset对象。...如果重写了get_queryset,那么以后获取queryset的时候就需要通过调用get_queryset方法。因为queryset 这个属性只会调用一次,以后所有的请求都是使用他的缓存。...serializer_class serializer_class用来验证和序列化数据的。也是可以通过直接设置这个属性,也可以通过重写get_serializer_class来实现。...您不太可能想要覆盖此方法,但如果您想将配置的过滤后端应用到默认查询集,您可能需要从列表视图或自定义get_object 方法中调用它。
通常,您必须设置此属性或覆盖该get_queryset()方法。如果您要覆盖视图方法,请务必调用get_queryset()而不是直接访问此属性。...serializer_class 应该用于验证和反序列化输入以及序列化输出的序列化器类。通常,您必须设置此属性或覆盖该get_serializer_class()方法。...URL conf 应包含与此值对应的关键字参数。如果未设置,则默认使用lookup_field. 分页 以下属性用于在与列表视图一起使用时控制分页。...方法 列表视图与详情视图通用 get_queryset(self) 返回视图使用的查询集,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写,例如: def get_queryset...(self): return BookInfo.objects.all() get_serializer_class(self) 返回序列化器类,默认返回serializer_class,可以重写
视图集中 serializer_class 属性已经被指定为了 PostListSerializer,那 PostRetrieveSerializer 应该指定在哪呢?...类似于视图集类的 queryset 属性和 get_queryset 方法的关系, serializer_class 属性的值也可以通过 get_serializer_class 方法返回的值覆盖,因此我们可以根据不同的...destory 因此,我们在视图集中重写 get_serializer_class 方法,写入我们自己的逻辑,就可以根据不同请求,分别获取相应的序列化器了: class PostViewSet(...省略其他属性和方法 def get_serializer_class(): if self.action == 'list': return PostListSerializer...更好的做好是,给视图集加一个属性,用于配置 action 和 serializer_class 的对应关系,通过查表法查找 action 应该使用的序列化器。
它提供了以下方法:get_queryset(): 获取数据的查询集。可以重写此方法来筛选数据。get_object(): 获取单个对象的方法。可以重写此方法来自定义获取对象的逻辑。...get_serializer_class(): 获取序列化器的方法。可以重写此方法来自定义序列化器。get_serializer(): 获取序列化器的实例。...import genericsclass ArticleList(generics.ListCreateAPIView): queryset = Article.objects.all() serializer_class...我们设置了queryset属性为所有Article对象,并设置了serializer_class属性为ArticleSerializer。...这个视图提供了get和post方法,可以用于获取文章列表和创建新文章。
它继承自GenericAPIView和ViewSetMixin,提供了以下方法:get_queryset(): 获取数据的查询集。可以重写此方法来筛选数据。...get_object(): 获取单个对象的方法。可以重写此方法来自定义获取对象的逻辑。get_serializer_class(): 获取序列化器的方法。可以重写此方法来自定义序列化器。...import viewsetsclass ArticleViewSet(viewsets.ModelViewSet): queryset = Article.objects.all() serializer_class...我们设置了queryset属性为所有Article对象,并设置了serializer_class属性为ArticleSerializer。...这个视图提供了list、create、retrieve、update、partial_update和destroy方法,可以用于处理CRUD操作。
使用 super().list(request, *args, **kwargs) 调用父类的 list方法 查看返回的 Response对象 ?...,重写 get_serializer_class 源码 def get_serializer_class(self): """ Return the class to use for the...` attribute, " "or override the `get_serializer_class()` method...__name__ ) return self.serializer_class 重写 def get_serializer_class(self): if self.action...Reports.objects.create(**validated_data) return report 从数据库中可以看出其中 html是一串字符串,它需要转换成html格式才可以正常展示,所以在接口返回的内容中不应该包含它
本文整理在 WPF 里面,自定义控件,非用户控件时,可以重写基类的许多方法和属性,这些方法和属性的作用和含义。...方便让大家了解到自定义控件时,有哪些方法或属性可以被重写,重写时的正确实现以及其影响是什么 这是有伙伴问我,他在自定义控件时,发现了自己的自定义控件里面的子控件的 Loaded 事件不触发,命中测试不进入...,附加属性 本文将使用直接继承 FrameworkElement 的自定义控件类型为例子,由于在 WPF 里面有着新手比较友好的设计,在自己定义的一层(视觉树概念上的层级)控件上,各个事件或方法基本都能被符合预期正常触发...机制里面的,无法让 F2 的事件和重写的方法被符合预期的调用 接下来咱来修改一下 F1 类型,重写 VisualChildrenCount 属性和 GetVisualChild 方法 修改 F1 的代码如下...也就是说仅仅只有 重写 VisualChildrenCount 属性和 GetVisualChild 方法对此需求来说还是不够。
UserViewset(CreateModelMixin,mixins.RetrieveModelMixin,viewsets.GenericViewSet): ''' 用户 ''' serializer_class...return UserRegSerializer return UserDetailSerializer #虽然继承了Retrieve可以获取用户详情,但是并不知道用户的id,所有要重写...get_object方法 #重写get_object方法,就知道是哪个用户了 def get_object(self): return self.request.user...self, serializer): return serializer.save() 主要添加的内容: 继承mixins.RetrieveModelMixin -->>获取用户信息 重写...IsOwnerOrReadOnly) authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) serializer_class
加入serializer_class属性与实现get_serializer_class()方法。...重写了as_view方法,可以获取到HTTP的请求方法。...(self): # 重写get_serializer_class方法 if self.action == 'list': return CourseSerializer...重写了as_view方法,可以获取到HTTP的请求方法。...(self): # 重写get_serializer_class方法 if self.action == 'list': return CourseSerializer
: -GenericAPIView 继承了APIView,封装了一些属性和方法,跟数据库打交道 -queryset = None # 指定序列化集 -serializer_class...# 返回序列化类 ,后期可能重写 demo: # 指定序列化集 queryset = models.Book.objects.all() # 指定序列化类 serializer_class...= 'pk' lookup_url_kwarg = None get_queryset()方法可以重写,如果我们需要在一个视图类内操作另外表模型,来指定序列化的数据 class BookViewDetail...,对应retrieve()方法 DestroyModelMixin:删除一条API,对应destroy()方法 注意:CreateModelMixin扩展类提供了更高级的方法,可以通过重写来校验数据存入...重写' .as_view() ',以便它接受一个' actions '关键字执行 将HTTP方法绑定到资源上的动作。
类似于Django中标准的request.POST和 request.FILES属性,但提供如下特性: 1 包含了解析之后的文件和非文件数据 2 包含了对POST、PUT、PATCH请求方式解析后的数据...提供的关于序列化器使用的属性与方法 属性:serializer_class 指明视图使用的序列化器 方法: get_serializer_class(self) : 当出现一个视图类中调用多个序列化器时...,那么可以通过条件判断在get_serializer_class方法中通过返回不同的序列化器类名就可以让视图方法执行不同的序列化器对象了。...返回序列化器类,默认返回serializer_class,可以重写。...方法: get_queryset(self) :返回视图使用的查询集,主要用来提供给Mixin扩展类使用,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写 get_object
通常在使用时,可搭配一个或多个 Mixin 扩展类。...指明视图使用的序列化器 ① 通过属性: serializer_class ② 通过方法: get_serializer_class(self) get_serializer(self, args,...*kwargs) 数据库查询的属性与方法 指明使用的数据查询集 ① 通过属性 queryset ② 通过方法 get_queryset(self) get_object(self) class...BookListView(GenericAPIView): """使用GenericAPIView实现“获取所有图书信息”接口""" serializer_class = BookSerializer..., GenericAPIView): """使用GenericAPIView实现“获取单一图书信息”接口""" serializer_class = BookSerializer # 指定序列化器
= BookInfoSerializer queryset 指明该视图在查询数据时使用的查询集 serializer_class 指明该视图在进行序列化或反序列化时使用的序列化器 3.定义路由 from...=True 或 queryset参数 包含 read_only=True 参数时,该字段将不能用作反序列化使用 包含 queryset 参数时,将被用作反序列化时参数校验使用 from booktest.serializers...to_representation 方法 序列化器的每个字段实际都是由该字段类型的to_representation方法决定格式的,可以通过重写该方法来决定格式。...支持定义的属性 authentication_classes 列表或元祖,身份认证类 permissoin_classes 列表或元祖,权限检查类 throttle_classes 列表或元祖,流量控制类...返回序列化器类,默认返回serializer_class,可以重写,例如: def get_serializer_class(self): if self.request.user.is_staff
serializer.HiddenField(default=serializer.CurrentUser()) 在用Dajngo RestFramework时, 有时候需要这么一个场景,前端不需要传一个或多个字段...,这些字是直接根据用户登录信息判断自动赋值的,如果用mixin和viewset进行搭配写接口,要么重写create, update等方法,要么就是在serializer_class时就定义默认值,而第二种方法明显简单一些...具体看代码 # 假如我定义了一个serliazer,shop和status都是自动判断后赋值的 # 用HiddenField定义字段,default方法来写具体赋值函数 # default方法是一个类,...需要重写set_context的方法 from rest_framework.compat import ( InvalidTimeError, MaxLengthValidator, MaxValueValidator...Game.objects.filter( Q(shop=self.request.user.shop) | Q(shop__com_circle=self.request.user.shop)) def get_serializer_class
使用场景: 重写 get_serializer_class和get_queryset,根据不同的操作返回不同的序列化器类和不同的查询集。...lookup_value_regex = '\d+' 2.1视图集额外处理方法url配置项的生成 需要给对应的方法添加action装饰器。...IsAuthenticated,) ... 5.2自定义权限(了解即可) 如需自定义权限,需继承 rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部...8.1使用方法: 在类视图中设置filter_backends,使用 rest_framework.filters.OrderingFilter过滤器,REST framework会在请求的查询字符串参数中检查是否包含了...ordering参数,如果包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序。
,我们还可以通过重写get_serializer或者get_queryset对 同一个类中的指定视图采用不同的queryset或者不同的序列化器 """ def get_queryset...(self): """在视图集中视图对象下面会新增一个action属性,用于获取视图方法名""" if BookInfo.action == "get_top_3":...此扩展方法包括:get_serializer_class(获取序列化器返回)、action属性、自定义方法的使用 from django.db import DatabaseError from rest_framework.authentication...# 指定排序字段 ordering_fields=('id','bread') # 指定分页器 pagination_class = PageNum def get_serializer_class...(self): # get_serializer_class会被get_serializer调用 # 默认返回self.serializer_class
APIView对django本身的View进行封装,从上述的代码,这样分析,两者的差别看起来不是很大,但实际中APIView做了很多东西,它定义了很多属性与方法,举几个例子 # 这三个是常用的属性...加入serializer_class属性与实现get_serializer_class()方法。...它们两者的关系同1,要么设置属性,要么重载方法。它们的功能在于获取某一个实例时,指定传进来的后缀是什么。...重写了as_view方法,可以获取到HTTP的请求方法。...(self): # 重写get_serializer_class方法 if self.action == 'list': return CourseSerializer
显然,在手动添加新品之后,新品数据即同步,请求的参数中包含is_new=true。...为了在创建brand时只显示一级类别,在adminx.py中定义GoodsBrandAdmin类时重写了get_context()方法,其中获取到category字段只取category_type为1的数据...CreateModelMixin类的perform_create(serializer)方法,修改购物车数量重写UpdateModelMixin类的perform_update(serializer)方法...,删除购物车记录重写DestroyModelMixin类的perform_destroy(instance)方法,如下: class ShoppingCartViewSet(viewsets.ModelViewSet...DRF自带了限速功能,直接使用throttling进行限速即可实现,throttling与权限类似,它决定是否应授权请求。
以下属性控制基本视图行为。 queryset:应用于从此视图返回对象的查询集。通常,必须设置此属性或重写该方法。...如果要重写视图方法,请务必调用而不是直接访问此属性,因为将评估一次,并且这些结果将缓存用于所有后续请求。 serializer_class:应用于验证和反序列化输入以及序列化输出的序列化程序类。...通常,必须设置此属性或重写该方法。 lookup_field:应用于执行各个模型实例的对象查找的模型字段。缺省值为 。...URL conf应包含与此值对应的关键字参数。如果未设置,则默认使用与 相同的值。...queryset = BookInfo.objects.all() # 指定序列化器 serializer_class = BookSerializer def get
领取专属 10元无门槛券
手把手带您无忧上云