首页 > 其他分享 >1113.DRF

1113.DRF

时间:2023-06-08 13:11:49浏览次数:33  
标签:删除 模型 视图 1113 序列化 数据 class DRF

一、路由器

1. SimpleRouter

该路由器包括标准集合:list,create,retrieve,update,partial_update和destroy动作的路由。视图集中还可以使用@detail_route或@list_route装饰器标记要被路由的其他方法。

2. DefaultRouter

这个路由器类似于上面的SimpleRouter,但是还包括一个默认返回所有列表的超链接的API根视图。它还生成可选的.json样式格式后缀的路由。

二、逻辑删除

1. 逻辑删除概述

逻辑删除:删除并不是真正的做删除,而是进行逻辑删除,逻辑删除的数据也应该无法查询、获取,所以需要对代码进行修改。

2. 实现

三、关联序列化

1. StringRelatedField

将关联模型的__str__方法返回值序列化出来。

2. source

序列化器增加一个字段引入另外一个模型的字段数据。

3. 序列化器嵌套(反序列化)

序列化器增加一个字段引入另外一个模型的字段数据,显示关联序列化器的所有字段数据嵌入。

四、拓展

1. 视图集新增额外功能

默认只为标准的增删改查行为生成了路由信息,如果想昂自定义的行为也生成路由需要再定义行为上使用action装饰器。

2. 限流

可以对接口访问频次进行限制,以减轻服务器压力。可以使用second、minute、hour、day来指明周期。

五、RESTful

1. 请求与响应

2. 概述

3. 设计规范

RESTful设计风格:一种接口设计规范,解决不同开发人员按照自己习惯与风格开发出来的接口差异性。

请求方式:

GET:SELECT从服务器获取资源;

POST:CREATE  POST:给服务器提交资源;

PUT:UPDATE 请求中的负载创建或者替换目标资源;

DELETE:DELETE删除资源。

请求地址:

例如学生管理系统:我们需要对学生进行增删改查,每个操作都需要提供对应的api接口。

请求方法

请求地址

后端操作

响应

GET

/students

获取所有学生

数组

POST

/students

增加学生

创建的对象

GET

/students/1

获取id为1的学生

单个对象

PUT

/students/1

修改id为1的学生

修改后的对象

DELETE

/students/1

删除id为1的学生

状态码:

六、DRF项目初始

1. DRF概述

DRF(Django Rest Framework)一个内置在jdango里面的子应用,可以快速开发REST API接口应用,就是一个Django插件或者说是拓展。

直接在虚拟环境中执行以下命令:

pip install djangorestframework   

配置作者信息:File-->Editor-->file and Code Templates-->Python Script.

mysql安装以及信息配置,此处采用远程文件配置,而非srttings.py中直接配置,有效的保护个人信息。

Mysql数据库:虚拟环境采用超级账户进入mysql后,创建一个新账号,用于专门管理该项目下数据库数据。

2. 日志器

用于记录系统运行过程中的各种日志信息,在项目根目录中创建一个logs文件夹,用于存放日志文件。

3. APP项目结构

APP统一管理文件夹配置。

七、序列化器

1. Serializer

序列化器:本质就是一个类,和模型类差不多的类,用于JSON与模型对象爱你互转以及效验数据。

from rest_framework import serializers

class MySerializer(serializers.Serializer):
	pass

序列化器字段名和模型字段名必须一致;

序列化器字段可以和模型字段个数不一致;

如果少于模型字段,则没有的字段不会进行显示;

其中就是定义:需要传入哪些字段数据,需要返回哪些字段数据。

2. ModeSerializer

Drf给我们提供了Serializer的子类ModeSerializer,Serializer能做的事情ModeSerializer都能做,并在基础上进行了拓展。

from rest_framework import serializers

class MySerializer(serializers.ModelSerializer):
	class Meta:
		model = student
		fields = ‘__all__’

ModeSerializer可以根据模型自动生成序列化器中的字段并帮我们实现create和update方法。

修改映射字段:extra_kwargs

在class Meta中使用extra_kwargs属性来修改映射字段的属性:

extra_kwargs = {

      '字段': { '属性': 值}  

    }

3. 额外效验逻辑

① 属性级别的效验:在序列化器中定义方法,方法名为validate_属性名(self,value)会自动将该属性的值传入value参数;

② 对象级别的验证:需要访问多个字段的验证时需要使用对象级别的验证,定义validate(self, data)方法,会自动将传入进来的所有数据传入data参数,data是一个字典。

4. 使用

实例化序列化器:使用序列化器就是实例化这个序列化器类,创建序列化器对象,初始化函数里面有两个参数,Instance:传入模型、查询集、字典;Data:传入要反序列化的数据。

八、视图集

1. 视图集

Django REST framework允许将一组相关视图的逻辑组合在单个类称为(ViewSet)中。ViesSet只是一种基于类的视图,它不提供任何方法处理程序,如get()或post(),而是提供诸如list()和create()子类的操作,ViewSet的方法处理程序仅适用as_view方法绑定到完成视图的响应操作。

list() 提供一组数据

retrieve() 提供单个数据

create() 创建数据

update() 保存数据

destory() 删除数据

2. ModeViewSet

实现了刚刚的所有方法。只需要定义数据集和序列化器就好了。

class  MyViewSet(ModelViewSet):
	queryset = model.objects.all()
	serializer_class = ModelSerializer

 

标签:删除,模型,视图,1113,序列化,数据,class,DRF
From: https://www.cnblogs.com/lxinghua/p/17466124.html

相关文章

  • yum源导入KEY值----warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key
    Totalsize:42MDownloadingPackages:warning:rpmts_HdrFromFdno:HeaderV3RSA/SHA1Signature,keyIDc105b9de:NOKEYRetrievingkeyfromfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5GPGkeyretrievalfailed:[Errno14]Couldnotopen/readfile:///......
  • drf:Method Not Allowed
    put请求,报错如题其中的urlurl(r'books/',views.BookView.as_view()),path('books/<int:pk>',views.BookView2.as_view())原因:第一条url后没加$,put请求被第一条url匹配到,第一个url是get和put,所以报错putnotallow......
  • drf之频率类源码
    1频率类写一个类,继承SimpleRateThrottle,重写get_cache_key,返回[ip,用户id]什么,就以什么做限制,编写类属性scope=字符串,在配置文件中配置'DEFAULT_THROTTLE_RATES':{'字符串':'3/m',}配置在视图类,全局使用(配置在配置文件中)2自定义频率类......
  • DRF大回顾
    drf大回顾1drf入门规范 -前后端开发模式:混合,分离-API接口:地址(url),请求方法(method),请求参数(request),返回值(response)-postman的使用-序列化和反序列化-restful规范 -http响应状态码-想在django中写符合规范的接口-djangorestfr......
  • drf
    drf1web应用模式1混合开发2前后端分离api接口#通过网络,规定前后台信息的交互规则的url链接,也就是前后的交互的媒介restful规范'''-1数据的安全保障,通常使用https(http+ssl/tsl)协议-url链接一般都采用https协议进行传输-采用https协议,可以提高数据......
  • drf-基于角色的访问控制
    目录一权限控制ACLRBAC二控制权限2.1django中,如何做权限控制的2.2我们开发中做权限控制2.3基于django的auth+admin+第三方美化快速开发1.安装2.配置文件配置,注册app3.菜单栏定制4.自定义菜单和页面5.自定义按钮6.切换图标7.首页显示的隐藏2.4djagno-vue-admin一权......
  • drf-JWT认证
    目录一jwt介绍和原理1.1cookie,session,token发展历史1.2认证过程1.3JWT的构成1.3.1header1.3.2payload1.3.3signature二base64编码和解码2.1base64使用2.2base64的用途三jwt开发流程四drf-jwt快速使用五drf-jwt定制返回格式六自定义签发和认证6.1drf-jwt自定义用户......
  • drf-jwt
    jwt原理使用jwt认证和使用session认证的区别session是将用户信息存放在数据库中,在客户端存一个随机的字符串,下次用户提交的时候将字符串与数据库中存在的进行比较jwt是根据用户提交的信息,产生一个token,将token返回给客户端,下次用户提交的时候,将token进行解析三段式#这是一......
  • drf——jwt
    jwt原理使用jwt认证和使用session认证的区别三段式eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ#1.headerjwt的头部承载两部分信息:声明类型这里是jwt......
  • jwt原理,jwt开发流程,drf-jwt快速使用,drf-jwt定制返回格式,drf-jwt自定义用户表签发,drf-j
    jwt原理:  JWT就是一段字符串,由三段信息构成的,将这三段信息文本用.链接一起就构成了Jwt字符串1headerjwt的头部承载两部分信息:声明类型,这里是jwt声明加密的算法通常直接使用HMACSHA256公司信息......