当前位置: 首页 > news >正文

富民网站建设电脑课程培训零基础

富民网站建设,电脑课程培训零基础,网络推广优化seo,网站建设代码下载大全1. GenericAPIView [通用视图类]#xff0c;概述 继承自 APIView增加了操作序列化器和数据库查询的方法#xff0c;作用是为下面Mixin扩展类的执行提供方法支持。通常在使用时#xff0c;可搭配一个或者多个Mixin扩展类源码 当我们查看 GenericAPIView 的源码时#xff0c…1. GenericAPIView [通用视图类]概述 继承自 APIView增加了操作序列化器和数据库查询的方法作用是为下面Mixin扩展类的执行提供方法支持。通常在使用时可搭配一个或者多个Mixin扩展类源码 当我们查看 GenericAPIView 的源码时发现他也是继承了views.APIView class GenericAPIView(views.APIView):Base class for all other generic views.# Youll need to either set these attributes,# or override get_queryset()/get_serializer_class().# If you are overriding a view method, it is important that you call# get_queryset() instead of accessing the queryset property directly,# as queryset will get evaluated only once, and those results are cached# for all subsequent requests.queryset Noneserializer_class None# If you want to use object lookups other than pk, set lookup_field.# For more complex lookup requirements override get_object().lookup_field pklookup_url_kwarg None# The filter backend classes to use for queryset filteringfilter_backends api_settings.DEFAULT_FILTER_BACKENDS# The style to use for queryset pagination.pagination_class api_settings.DEFAULT_PAGINATION_CLASSdef get_queryset(self):Get the list of items for this view.This must be an iterable, and may be a queryset.Defaults to using self.queryset.This method should always be used rather than accessing self.querysetdirectly, as self.queryset gets evaluated only once, and those resultsare cached for all subsequent requests.You may want to override this if you need to provide differentquerysets depending on the incoming request.(Eg. return a list of items that is specific to the user)assert self.queryset is not None, (%s should either include a queryset attribute, or override the get_queryset() method.% self.__class__.__name__)queryset self.querysetif isinstance(queryset, QuerySet):# Ensure queryset is re-evaluated on each request.queryset queryset.all()return querysetdef get_object(self):Returns the object the view is displaying.You may want to override this if you need to provide non-standardqueryset lookups. Eg if objects are referenced using multiplekeyword arguments in the url conf.queryset self.filter_queryset(self.get_queryset())# Perform the lookup filtering.lookup_url_kwarg self.lookup_url_kwarg or self.lookup_fieldassert lookup_url_kwarg in self.kwargs, (Expected view %s to be called with a URL keyword argument named %s. Fix your URL conf, or set the .lookup_field attribute on the view correctly. %(self.__class__.__name__, lookup_url_kwarg))filter_kwargs {self.lookup_field: self.kwargs[lookup_url_kwarg]}obj get_object_or_404(queryset, **filter_kwargs)# May raise a permission deniedself.check_object_permissions(self.request, obj)return objdef get_serializer(self, *args, **kwargs):Return the serializer instance that should be used for validating anddeserializing input, and for serializing output.serializer_class self.get_serializer_class()kwargs.setdefault(context, self.get_serializer_context())return serializer_class(*args, **kwargs)def get_serializer_class(self):Return the class to use for the serializer.Defaults to using self.serializer_class.You may want to override this if you need to provide differentserializations depending on the incoming request.(Eg. admins get full serialization, others get basic serialization)assert self.serializer_class is not None, (%s should either include a serializer_class attribute, or override the get_serializer_class() method.% self.__class__.__name__)return self.serializer_classdef get_serializer_context(self):Extra context provided to the serializer class.return {request: self.request,format: self.format_kwarg,view: self}def filter_queryset(self, queryset):Given a queryset, filter it with whichever filter backend is in use.You are unlikely to want to override this method, although you may needto call it either from a list view, or from a custom get_objectmethod if you want to apply the configured filtering backend to thedefault queryset.for backend in list(self.filter_backends):queryset backend().filter_queryset(self.request, queryset, self)return querysetpropertydef paginator(self):The paginator instance associated with the view, or None.if not hasattr(self, _paginator):if self.pagination_class is None:self._paginator Noneelse:self._paginator self.pagination_class()return self._paginatordef paginate_queryset(self, queryset):Return a single page of results, or None if pagination is disabled.if self.paginator is None:return Nonereturn self.paginator.paginate_queryset(queryset, self.request, viewself)def get_paginated_response(self, data):Return a paginated style Response object for the given output data.assert self.paginator is not Nonereturn self.paginator.get_paginated_response(data)2.get_serializer_class(self) 当出现一个视图类中调用多个序列化器时那么可以通过条件判断在 get_serializer_class 方法中通过返回不同的序列化 器类名就可以让视图方法执行不同的序列化器对象了函数返回序列化器类默认返回 serializer_class 可以重写 def get_serializer_class(self):Return the class to use for the serializer.Defaults to using self.serializer_class.You may want to override this if you need to provide differentserializations depending on the incoming request.(Eg. admins get full serialization, others get basic serialization)assert self.serializer_class is not None, (%s should either include a serializer_class attribute, or override the get_serializer_class() method.% self.__class__.__name__)return self.serializer_class3.get_serializer_class(self) 函数返回序列化器队对象主要用来提供给Mixin扩展类使用如果我们在视图中想要获取序列化器对象也可以直接调用此方法注意该方法在提供序列化器对象的时候会向序列化器对象的context属性补充三个数据request、 format、view、这三个数据对象可以定义序列化器时使用 request 当前视图的请求对象view 当前请求的类视图对象format 当前请求期望返回的数据格式 def get_serializer(self, *args, **kwargs):Return the serializer instance that should be used for validating anddeserializing input, and for serializing output.serializer_class self.get_serializer_class()kwargs.setdefault(context, self.get_serializer_context())return serializer_class(*args, **kwargs)4.get_queryset(self) 返回视图使用的查询集主要用来提供Mixin扩展类使用是列表视图与详情视图获取数据的基础默认返回queryset属性可以重写 def get_queryset(self):Get the list of items for this view.This must be an iterable, and may be a queryset.Defaults to using self.queryset.This method should always be used rather than accessing self.querysetdirectly, as self.queryset gets evaluated only once, and those resultsare cached for all subsequent requests.You may want to override this if you need to provide differentquerysets depending on the incoming request.(Eg. return a list of items that is specific to the user)assert self.queryset is not None, (%s should either include a queryset attribute, or override the get_queryset() method.% self.__class__.__name__)queryset self.querysetif isinstance(queryset, QuerySet):# Ensure queryset is re-evaluated on each request.queryset queryset.all()return queryset5.def get_object(self): 返回详情视图所需要的模型类的数据对象主要用来提供给Mixin扩展类使用在视图中可以调用该方法获取详情信息的模型对象若详情访问的模型类对象不存在会返回404该方法会默认使用APIView提供的check_object_permissions方法检查当前对象是否有权限被访问 def get_object(self):Returns the object the view is displaying.You may want to override this if you need to provide non-standardqueryset lookups. Eg if objects are referenced using multiplekeyword arguments in the url conf.queryset self.filter_queryset(self.get_queryset())# Perform the lookup filtering.lookup_url_kwarg self.lookup_url_kwarg or self.lookup_fieldassert lookup_url_kwarg in self.kwargs, (Expected view %s to be called with a URL keyword argument named %s. Fix your URL conf, or set the .lookup_field attribute on the view correctly. %(self.__class__.__name__, lookup_url_kwarg))filter_kwargs {self.lookup_field: self.kwargs[lookup_url_kwarg]}obj get_object_or_404(queryset, **filter_kwargs)# May raise a permission deniedself.check_object_permissions(self.request, obj)return obj5. 使用实例 view.py from rest_framework.generics import GenericAPIViewclass BookSerializers(serializers.ModelSerializer):class Meta:model Bookfields __all__class BookView(GenericAPIView):# queryset 这个变量名称不能变queryset Book.objects.all()# # serializer_class 这个变量名称不能变serializer_class BookSerializers# 查所有def get(self, request):# get_queryset() 就是取 queryset 这个变量的值即 Book.objects.all()取出所有的数据# book_list self.get_queryset()# 构建序列化器对象# serializer self.get_serializer_class()(instanceself.get_queryset(), manyTrue)serializer self.get_serializer(instanceself.get_queryset(), manyTrue)return Response(serializer.data)# 增加一个def post(self, request):# 获取参数data request.data# 构建序列化器对象serializer self.get_serializer(datadata)# 校验数据# 校验原理# 1.所有符合的数据都放在serializer.validated_data# 2.不符合数据的都放在serializer.errorsif serializer.is_valid(): # 返回一个布尔值所有字段都符合才返回True,反之返回False# 数据校验通过存入数据库中# new_book Book.objects.create(**serializer.validated_data)serializer.save()return Response(serializer.data)else:# 数据校验失败return Response(serializer.errors)class BookDetailsView(GenericAPIView):# queryset 这个变量名称不能变queryset Book.objects.all()# # serializer_class 这个变量名称不能变serializer_class BookSerializers# 查一个def get(self, request, pk):serializer self.get_serializer(instanceself.get_object(), manyFalse)return Response(serializer.data)# 修改一个def put(self, request, pk):book request.data# 构建序列化器对象serializer self.get_serializer(instanceself.get_object(), databook)if serializer.is_valid():serializer.save()return Response(serializer.data)else:return Response(serializer.errors)# 删除一个def delete(self, request, pk):self.get_object().delete()return Response()urls.py from django.contrib import admin from django.urls import path, re_path from sers import viewsurlpatterns [path(admin/, admin.site.urls),path(sers/book/, views.BookView.as_view()),# 注意 这块是固定的pkre_path(rsers/book/(?Ppk\d), views.BookDetailsView.as_view()), ]
http://www.hkea.cn/news/14325251/

相关文章:

  • 莱州网站建设费用成都企业网站建设 四川冠辰科技
  • 网站建设收费明细网站建设安全方案
  • 长沙做网站要多少钱wordpress 百度文库
  • 做外包胡it网站网站打开很慢怎么回事啊
  • 如何用apache建设网站最新seo视频教程
  • 医院网站建设策划案模板住房和城乡建设部官网查询平台
  • 网站建设及管理工作岗位要求网络公司经营范围写电子商务
  • 用flash做的网站展示wordpress 小工具开发
  • 龙岗网站建设服务岳阳网站建设哪里有
  • 网站 短链接怎么做No商业网站建设
  • 如何做网站方案天津网站推广方法
  • 网站域名费用网店装修素材网站
  • 网站系统怎么做的青岛房产网新楼盘
  • 网站被k申述高端html5网站建设
  • 上海网站建设兴策重庆网站免费优化
  • 礼品网站设计wordpress商品多选
  • 重庆网站建设公司价钱wordpress博客文章怎么设置
  • 杭州绿城乐居建设管理有限公司网站装潢设计软件有哪些
  • 在电子商务网站建设中需要哪些知识桂林生活网租房信息
  • 网站建设有哪些模块上海专业网站制作设计
  • 跨境o2o网站建设方案给公司做企业网站
  • 广州 建 网站wordpress 全站pjax
  • jsp网站开发需要什么技术编程教程免费视频
  • 做网站怎么赚钱 111哪里可以做拍卖网站
  • 深圳专业的网站建设哪个网站做原创歌曲
  • 曲阳路街道网站建设网络推广是做什么工作
  • wordpress无法开启多站点远程教育网站建设
  • 假网站怎么做呢企业品牌网站建设应该怎么做
  • 无锡手机网站建设公司怎样创建网页
  • html5手机网站织梦模板怎么把本地wordpress上传到服务器