做网站大概要/百度信息流代运营

做网站大概要,百度信息流代运营,o2o,有哪些做特卖的网站有哪些序列化器类 一、Serializer序列化类 Serializer是DRF的序列化器基类,提供基本功能,使用Serializer类需要自己定义字段名称和类型。 BookSerializer(Serializer):name serializers.CharField()price serlializers.IntegerField()date serlializers.…

序列化器类

一、Serializer序列化类

Serializer是DRF的序列化器基类,提供基本功能,使用Serializer类需要自己定义字段名称和类型。

BookSerializer(Serializer):name = serializers.CharField()price = serlializers.IntegerField()date = serlializers.DateField()

Serializer序列化器类初始化的时候的几个参数说明:
instance这个指从数据库中读取的记录对应的对象,用于显示或者编辑中的现有
many如果是true,则指传递了多个对象
data用于收集通过post传上来的字典,用于新增或者编辑中的更新
Serializer序列化器提供了一个.save()接口用于保存数据,这个函数里面通过判断instance是否有值来确定是新增还是更新,如果有值则调用self.update(),如果没有值则调用self.create(),这两个方法需要自己实现,以满足用户的新增或者修改的逻辑。

self.create(self, validated_data)
self.update(self, instance, validated_data)

实现了这两个方法后,在客户类里面需要新增或者保存的时候,只需统一的调用serializer.save()就可以了。

二、ModelSerializer类

使用ModelSerializer类,就不用再自己定义字段名称和类型了,直接给出模型名称,指出需要序列化的字段即可。

BookSerializer(ModelSerlizer):class Meta:model	= Bookfields	= [“name”, “date”] # 这里可以自己定义需要的字段,__all__表示所有字段,也可以自己定义字段名称

使用ModelSerlializer类也不需要再自己定义create()和update()方法了,ModelSerlializer类已经实现了这两个函数的定义。

视图类

django里面的视图实际上是业务逻辑存放的地方,也就是“功能”,并不是页面样式。
而业务的功能无非就是这5种:增、删、改、查(列表)、查(详情)
DRF里面提供了三大类的类:API、mixin、ViewSet,API类的类提供接口(get、post、put、update、delete),mixin提供功能,ViewSet负责包装。

一、CBV视图,基于类的视图

django的原生视图是基于函数的,也就是FBV。CBV是基于类的,继承自View类。View类中有两个重要的函数:

View.dispatch()
View.as_view()

在View.as_view()函数中,又定义了一个子函数view(),as_view()会返回这个函数。在基于函数(FBV)的视图模式中,urls.py文件中指向的就是函数,而在基于类的视图(CBV)中,urls.py文件中指向的是类的as_view()函数,注意这里是加了括号的,就是说是要直接执行这个函数的,而这个函数的执行结果,是里面的子函数vews()。子view()函数会调用View.dispatch()函数,用于通过反射,指向在客户类中定义的get(),post(),put(),delete()等http方法的函数。
提示:CBV相对于FBV,改变了函数的组织形式,FBV是自己定义函数,通过路径找到该函数。CBV是统一使用http的method,用过method名称(get、post、put、update、delete),找到以该名称定义的函数,实现增删改查查。这也就是RESTFul。

二、APIView

APIView(View)类中也定义了以下两个函数:

APIView.dispatch()
APIView.as_view()

其中,as_view()函数调用了csrf_exempt()函数用来处理跨域请求
使用APIView类也需要自己定义:get(),post(),put(),delete()等http方法函数。
相比django原生的CBV,这里的dispatch()函数包装了request,提供了一个用于API的强大的request。另外还初始化了三个基础功能:认证、权限、限流
提示:相对于基本CBV,APIView定制了request,专门用于API应用。另外还调用了三个基础功能:认证、权限、限流。

三、通用视图类GenericAPIView

通用视图类GenericAPIView(APIView)
引入了两个变量:
queryset表示数据集
serializer_class 表示序列化器类
get、post、put、delete等函数还需要有
提示:
1、这个类需要配合其他类,通过多继承的方式使用。
2、有了数据集和序列化器类,我们还需要操作这些数据的方法:get、post、put…,下面的mixin系类分别定义了这些方法。以便根据自己的需求组合使用。

四、mixin混合类

mixins 是一种代码复用机制,允许我们将多个组件共享的逻辑提取到一个独立的对象中,从而提高代码的可维护性和重用性。
这里新增了以下几个类:CreateModelMixin、ListModelMixin、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin,每一个类里面只实现了类名称种的方法。注意这里的5个方法和增删改查查中的5个方法名称不一致,需要在定义一下增删改查查方法,然后只需要在具体方法内返回对应的mixin方法即可。
例如,CreateModelMixin类实现了create方法,可以实现对数据库的增加操作
ListModelMixin类实现了list方法,可以实现对数据库的查询操作
RetrieveModelMixin类实现了retrieve方法,可以实现对数据库的查询操作
UpdateModelMixin类实现了update方法,可以实现对数据库的修改操作
DestroyModelMixin类实现了destroy方法,可以实现对数据库的删除操作
使用方法:在视图类中继承GenericAPIView类和以上几个类,然后在视图类中定义queryset和serializer_class属性
最后在urls.py中配置路径
例如:
urls.py

urlpatterns = [path('houseku/', HouseKuList.as_view()),
]

views.py

class HouseKuList(generics.ListCreateAPIView, generics.GenericAPIView):queryset = HouseKu.objects.all()serializer_class = HouseKuSerializer# 这里还要写get、post、delete等函数,用于对应Mixin里面的list、create等def get(self, request):return self.list(request) def post(self, request):return self.create(request)

提示:GenericAPIView提供了queryset、serializer_class,mixin混合类提供了方法(但这些方法不对应的method名称)这两个组合在一起,就实现了相应的功能。

五、Mixin再封装,优化后的APIView

Mixin里面实现了list、create等方法,但是并没有对应http的method,DRF实现了进一步封装,创造了以下类:
ListCreateAPIView、RetrieveUpdateDestroyAPIView、ListAPIView、CreateAPIView、RetrieveAPIView、UpdateAPIView、DestroyAPIView
注意这里面没有mixin,而有API,通过继承这些类,可以实现对应的http方法:get、post、put、delete等,到这里,我们的客户类就不需要再写get、post、put、delete等方法了

class HouseKuViewSet(generics.ListCreateAPIView, generics.GenericAPIView):queryset = HouseKu.objects.all()serializer_class = HouseKuSerializer

提示:这里,***APIView已经封装了method对应名称的方法,组合起来,再配合GenericAPIView,只要提供queryset和serializer_class,就实现了所有的功能。

六、ViewSet

到这里,就不用再写两个(BookView用户列表,BookDetailView用于详细)自定义的类了。可以合二为一,然后在urls.py里面as_view的参数里,把put、post、delete等method自定义的函数关联起来就可以了。
ViewSet(ViewSetMixin, views.APIView)
ViewSetMixin里面的as_view()方法可以加参数,用于指定method方法到自定义方法的映射。

path(“book/”, views.BookView.as_view({“get”:”get_all”, “post”:”add_object”})
path(“book/(?P<pk>\d+)”,views.BookView.as_view({“get”:”get_object”, “delete”:”delete_object”, “put”:”update_object”})

七、示例

APIView

urls.py

urlpatterns = [path('user/', views.UserView.as_view()),path('user/<int:pk>/', views.UserDetailView.as_view()),
]

views.py

from rest_framework.views import APIViewclass UserView(APIView):def get(self, request):users = User.objects.all()serializer = UserSerializer(users, many=True)return Response(serializer.data)def post(self, request):serializer = UserSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=201)return Response(serializer.errors, status=400)class UserDetailView(APIView):def get(self, request, pk):user = User.objects.get(pk=pk)serializer = UserSerializer(user)return Response(serializer.data)def put(self, request, pk):user = User.objects.get(pk=pk)serializer = UserSerializer(user, data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data)return Response(serializer.errors, status=400)def delete(self, request, pk):user = User.objects.get(pk=pk)user.delete()return Response(status=204)

GenericAPIView

需配合一系列的Mixin来使用
urls.py

urlpatterns = [path('mixin/user/', views.UserMixinView.as_view()),path('mixin/user/<int:pk>/', views.UserMixinDetailView.as_view()),
]

views.py

class UserMixinView(mixins.ListModelMixin,mixins.CreateModelMixin,generics.GenericAPIView):queryset = User.objects.all()serializer_class = UserSerializerdef get(self, request, *args, **kwargs):return self.list(request, *args, **kwargs)def post(self, request, *args, **kwargs):return self.create(request, *args, **kwargs)class UserMixinDetailView(mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,generics.GenericAPIView):queryset = User.objects.all()serializer_class = UserSerializerdef get(self, request, *args, **kwargs):return self.retrieve(request, *args, **kwargs)def put(self, request, *args, **kwargs):return self.update(request, *args, **kwargs)def delete(self, request, *args, **kwargs):return self.destroy(request, *args, **kwargs)

ListCreateAPIView、RetrieveUpdateDestroyApiView

urls.py

urlpatterns = [path('generic/user/', views.UserGenericView.as_view()),path('generic/user/<int:pk>/', views.UserGenericDetailView.as_view()),
]

views.py

class UserGenericView(generics.ListCreateAPIView):queryset = User.objects.all()serializer_class = UserSerializerclass UserGenericDetailView(generics.RetrieveUpdateDestroyAPIView):queryset = User.objects.all()serializer_class = UserSerializer

ViewSet

urls.py

urlpatterns = [path('viewset/user/', views.UserViewSet.as_view({'get': 'list', 'post': 'create'})),path('viewset/user/<int:pk>/', views.UserViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
]

到这里,已经将两个类合二为一了,最简洁,但是也最不灵活,适合用于不添加任何自己逻辑的增删改查查
views.py

class UserViewSet(viewsets.ModelViewSet):queryset = User.objects.all()serializer_class = UserSerializer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像分类数据集

《动手学深度学习》-3.5-学习笔记 # 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式&#xff0c; # 并除以255使得所有像素的数值均在0&#xff5e;1之间 trans transforms.ToTensor()#用于将图像数据从 PIL 图像格式&#xff08;Python Imaging Library&#xff…

架构师面试(十五):熔断设计

问题 某电商平台经常需要在大促运营活动中暂停评论、退款等业务&#xff0c;基于服务治理的设计理念&#xff0c;我们需要对该电商平台微服务系统的【服务熔断】进行设计&#xff0c;对此下面描述中说法正确的有哪几项呢&#xff1f; A. 服务管控系统管理着平台中所有服务之间…

Ubuntu20.04安装运行DynaSLAM

目录 一、安装Anaconda 二、相关依赖库安装 1、boost安装 2、Eigen 3安装 3、opencv安装 4、Pangolin安装 三、配置Mask_RCNN环境 四、DynaSLAM编译 五、DynaSLAM运行 一、安装Anaconda 打开以下链接&#xff1a; Index of / 下载和自己系统匹配的安装包。这里下…

X86 RouterOS 7.18 设置笔记三:防火墙设置(IPV4)

X86 j4125 4网口小主机折腾笔记五&#xff1a;PVE安装ROS RouterOS X86 RouterOS 7.18 设置笔记一&#xff1a;基础设置 X86 RouterOS 7.18 设置笔记二&#xff1a;网络基础设置(IPV4) X86 RouterOS 7.18 设置笔记三&#xff1a;防火墙设置(IPV4) X86 RouterOS 7.18 设置笔记四…

从 YOLOv1 到 YOLOv2:目标检测的进化之路

引言 你有没有想过&#xff0c;当你用手机拍一张照片&#xff0c;里面的人、车、狗是怎么被自动识别出来的&#xff1f;这背后靠的就是目标检测技术。目标检测是计算机视觉中的一个重要领域&#xff0c;它不仅要回答“图片里有什么”&#xff0c;还要告诉你“这些东西在哪里”…

数据的存储---整型、浮点型

目录 一、整型在内存中的存储 1. 原码、反码、补码 2. 大端与小端 二、浮点数在内存中的存储 1.浮点数的存 2. 浮点数的取 3. 题目解析 一个变量的创建需要在内存中开辟空间&#xff0c;而开辟的空间大小是由数据类型决定的。下面我们就来讨论一下整型、浮点型在内存中的…

Java 大视界 -- Java 大数据在智能教育虚拟实验室建设与实验数据分析中的应用(132)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

47.全排列 II

47.全排列 II 力扣题目链接 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] 输出…

centos没有ll

vi /etc/bashrc alias ll‘ls -l’ source /etc/bashrc

04 1个路由器配置一个子网的dhcp服务

前言 这是最近一个朋友的 ensp 相关的问题, 这里来大致了解一下 ensp, 计算机网络拓扑 相关基础知识 这里一系列文章, 主要是参照了这位博主的 ensp 专栏 这里 我只是做了一个记录, 自己实际操作了一遍, 增强了一些 自己的理解 当然 这里仅仅是一个 简单的示例, 实际场景…

网络空间安全(31)安全巡检

一、定义与目的 定义&#xff1a; 安全巡检是指由专业人员或特定部门负责&#xff0c;对各类设施、设备、环境等进行全面或重点检查&#xff0c;及时发现潜在的安全隐患或问题。 目的&#xff1a; 预防事故发生&#xff1a;通过定期的安全巡检&#xff0c;及时发现并解决潜在的…

信息学奥赛一本通 1449:【例题2】魔板

题目 1449&#xff1a;【例题2】魔板 分析 首先注意&#xff1a;输入是按顺时针给出的&#xff0c;但我们处理时需要按正常顺序排&#xff0c;可以用以下代码读入 string s(8, 0); // 初始化全零字符串 cin>>s[0]>>s[1]>>s[2]>>s[3]; cin>>…

Unity开发的抖音小游戏接入抖音开放平台中的流量主(抖音小游戏接入广告)

前言:作者在进行小游戏审核版本的过程中,碰到了下列问题,所以对这个抖音小游戏接入广告研究了下。 还有就是作者的TTSDK版本号是6.2.6,使用的Unity版本是Unity2022.3.29f1,最好和作者的两个版本号保持一致,因为我发现TTSDK旧版的很多函数在新版中就已经无法正常使用了,必…

【xv6操作系统】系统调用与traps机制解析及实验设计

【xv6操作系统】系统调用与traps机制解析及实验设计 系统调用相关理论系统调用追溯系统调用实验设计Sysinfo&#x1f6a9;系统调用总结&#xff08;结合trap机制&#xff09; traptrap机制trap代码流程Backtrace实验alarm实验 系统调用 相关理论 隔离性&#xff08;isolation)…

在微信小程序或前端开发中,picker 和 select 都是用户交互中用于选择的组件,但它们在功能、设计和使用场景上有一定的区别

在微信小程序或前端开发中&#xff0c;picker 和 select 都是用户交互中用于选择的组件&#xff0c;但它们在功能、设计和使用场景上有一定的区别。 1. picker 的特点 描述&#xff1a; picker 是微信小程序中的原生组件&#xff0c;通常用于选择单项或多项值&#xff0c;如时…

PMP 证书的含金量怎么样?

pmp含金量&#xff0c;这是一个很有争议的话题&#xff0c;我根据我以往的面试跟工作经历对 PMP 也有几点看法&#xff0c;想跟大家聊一聊。 一、如果真心想做项目管理&#xff0c;PMP 一定要去考一个 现在的早已不是凭经验做项目的时代了&#xff0c;各大企业都追求专业式的…

Python数据类型进阶——详解

—— 小 峰 编 程 目录 1.整型 1.1 定义 1.2 独有功能 1.3 公共功能 1.4 转换 1.5 其他 1.5.1 长整型 1.5.2 地板除(除法&#xff09; 2. 布尔类型 2.1 定义 2.2 独有功能 2.3 公共功能 2.4 转换 2.5 其他 做条件自动转换 3.字符串类型 3.1 定义 3.2 独有功能…

docker python:latest镜像 允许ssh远程

跳转到家目录 cd创建pythonsshdockerfile mkdir pythonsshdockerfile跳转pythonsshdockerfile cd pythonsshdockerfile创建Dockerfile文件 vim Dockerfile将Dockerfile的指令复制到文件中 # 使用 python:latest 作为基础镜像 # 如果我的镜像列表中没有python:latest镜像&…

c++的基础排序算法

一、快速排序 1. 选择基准值&#xff08;Pivot&#xff09; 作用 &#xff1a;从数组中选择一个元素作为基准&#xff08;Pivot&#xff09;&#xff0c;用于划分数组。常见选择方式 &#xff1a; 固定选择最后一个元素&#xff08;如示例代码&#xff09;。随机选择&#xf…

jmeter分布式原理及实例

一、执行原理 二、相关注意事项 关闭防火墙所有上网控制机、代理机、服务器都在同一个网络上所有机器的jmeter和java版本必须一致关闭RMI.SSL开关 三、配置和执行 配置&#xff1a; 修改bin/jmeter.properties文件&#xff1a; 代理机&#xff1a; 修改服务端口&#xff1…