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

中小企业网站营销竞价广告是什么意思

中小企业网站营销,竞价广告是什么意思,展示设计案例,临沭县建设局官方网站1. GenericAPIView [通用视图类],概述 继承自 APIView增加了操作序列化器和数据库查询的方法,作用是为下面Mixin扩展类的执行提供方法支持。通常在使用时,可搭配一个或者多个Mixin扩展类源码 当我们查看 GenericAPIView 的源码时&#xff0c…

1. GenericAPIView [通用视图类],概述

  • 继承自 APIView
  • 增加了操作序列化器和数据库查询的方法,作用是为下面Mixin扩展类的执行提供方法支持。
  • 通常在使用时,可搭配一个或者多个Mixin扩展类
  • 源码
    当我们查看 GenericAPIView 的源码时,发现,他也是继承了views.APIView
class GenericAPIView(views.APIView):"""Base class for all other generic views."""# You'll 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 = 'pk'lookup_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.queryset`directly, 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_object`method 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 queryset@propertydef 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, view=self)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_class

3.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.queryset`directly, 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 queryset

5.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 obj

5. 使用实例

  • 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()(instance=self.get_queryset(), many=True)serializer = self.get_serializer(instance=self.get_queryset(), many=True)return Response(serializer.data)# 增加一个def post(self, request):# 获取参数data = request.data#  构建序列化器对象serializer = self.get_serializer(data=data)# 校验数据# 校验原理:# 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(instance=self.get_object(), many=False)return Response(serializer.data)# 修改一个def put(self, request, pk):book = request.data# 构建序列化器对象serializer = self.get_serializer(instance=self.get_object(), data=book)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(r'sers/book/(?P<pk>\d+)', views.BookDetailsView.as_view()),
]
http://www.hkea.cn/news/141923/

相关文章:

  • p2p网站开发关键词seo是什么意思
  • 自己免费怎么制作网站合肥今天的最新消息
  • 今日头条新闻10条简短seo网络优化招聘信息
  • 赣州人才网官方网站关键词seo优化软件
  • cad做兼职区哪个网站郑州网络营销公司排名
  • 宁夏银川做网站的公司有哪些网络营销分类
  • 换物网站为什么做不起来中国免费广告网
  • 可以显示一张图片的网站怎么搭建搜索引擎优化策略
  • 精品课程网站建设论文今天的新闻最新消息
  • 检查网站收录问题蚌埠seo外包
  • 建站展示网站优化网
  • 秦皇岛网站建设价格深圳seo公司
  • 广告型网站建设广州营销网站建设靠谱
  • 包头学做网站平台开发
  • 个人如何做微商城网站指数分布的分布函数
  • 北京网站设计哪家公司好建站工具
  • 深圳外贸网络推广seo诊断书案例
  • Java做网站的基本框架优化关键词规则
  • 网上手机商城网站建设直通车推广计划方案
  • 网站框架是谁做做个电商平台要多少钱
  • 网站开发建设书籍推荐b2b外贸平台
  • 网站首页的布局设计进行优化
  • 无锡做家纺公司网站如何建网站不花钱
  • bootstrap制作的网站页面优化网站seo
  • 海口网站建设优化班级优化大师官网登录
  • 连接品硕网线做怎么弹网站百度地图推广电话
  • 网站做cdn怎么弄百度推广怎么推广
  • 光谷做网站推广竞价服务托管公司
  • 网上商城网站建设方案书公众号seo排名
  • wordpress内网访问泰州百度关键词优化