drf序列化大总结(代码片段)

guyouyin123 guyouyin123     2023-04-16     683

关键词:

一、APIView的请求生命周期

'''
1)APIView的请求生命周期
    as_view():路由配置,禁用csrf
    dispatch():请求分发,请求解析、三大认证、异常处理、响应渲染
    request._request、request.query_params、request.data、request.META(请求头等诸多配置)
'''

二、序列化组件

视图类中使用序列化

'''
i)视图类中使用序列化
    serializer = UserModelSerializer(
        instance="对象(们)",
        data="数据(们)",
        many=False|True,  # 与数据或对象配套,代表操作的是否是多个
        partial=False|True,  # 运用在局部修改中,所以校验可以选填(required=False)
        context='request': request  # 视图、序列化传参 
    )
    serializer.is_valid(raise_exception=False|True)  # 校验
    serializer.save()  # 入库
    serializer.data  # 序列化后的数据
    serializer.errors  # 校验失败的信息
'''

Meta配置类中的配置

'''
model:关联的Model类
fields:所以序列化与反序列化字段
extra_kwargs:简单的校验规则
exclude:除某些字段
depth:连表深度
'''

自定义校验规则

'''
validate_字段名:局部校验钩子
validate:全局校验钩子
'''

入库方法

'''
create:增数据入库
update:改数据入库
后期这两个方法可能会被重写:涉及一些字段加密解密处理、不仅仅是单表入库操作
    user = User.create()
    UserDetail.create(user_id=user.id)
'''

自定义字段

'''
@property:在model类中自定义序列化字段
自定义字段 = serializers.字段类型(write_only=True, 其他规则):在serializer类中的自定义反序列化字段
系统字段 = serializers.字段类型(规则):覆盖字段,可以设置为只读、只写、可读可写
    外键字段的字段类型:PrimaryKeyRalatedField
'''

如果有群改操作

'''
自定义ListSerializer子类,重写update方法
在相关ModelSerializer中用list_serializer_class配置进行关联
'''

重(难)点

'''         
重(难)点:
    i)在视图类中初始化序列化类对象时的参数选择
    ii)指定好所有的序列化与反序列化字段
    iii)全局校验钩子的逻辑(难点)
    iv)是否要重写入库方法(难点)
'''

三、视图家族

'''
两个基类:APIView、GenericAPIVAPIView
        APIView:禁用csrf、解析、认证、渲染...
        GenericAPIVAPIView:禁用csrf、解析、认证、渲染... + 三个属性三个方法
        
工具类:mixin包下的五个类,使用GenericAPIVAPIView的三个属性三个方法(过渡)
    
工具视图类:mixin包下的类 + GenericAPIVAPIView 的组合形成的类
        配置三个属性 + 是否需要重写get、post等方法
    
视图集:ViewSetMixin重写as_view方法,可以自定义 请求方式 - 响应函数 的映射关系
        配置三个属性 + mixin包下的类 + GenericViewSet
        ViewSet
'''

四、路由组件

SimpleRouter

from django.conf.urls import url, include
from . import views
# 路由组件,必须配合视图集使用
from rest_framework.routers import SimpleRouter
router = SimpleRouter()

# 以后就写视图集的注册即可:BookV3APIView和BookV4APIView都是视图集
router.register('v3/books', views.BookV3APIView, 'book')
router.register('v4/books', views.BookV4APIView, 'book')

urlpatterns = [
    url('', include(router.urls))
]

五、权限认证

'''
i)RBAC:Role-Based Access Control - 基于角色权限的认证规则
        权限六表:用户表、分组表、权限表 + 三个关系表
        
ii)auth六表是否需要重写或断关联
        不需要
        
iii)admin|xadmin|自定义 提供的后台管理项目

iv)前台接口权限:三大认证
'''

技术图片

drf序列化组件(代码片段)

目录在视图中手动完成序列化操作Serializer序列化Serializer序列化总结:Serializer反序列化Serializer反序列化总结:ModelSerializer序列化与反序列化ModelSerializer序列化与反序列化总结:在视图中手动完成序列化操作#view.pyclassUserV1ApiView(AP... 查看详情

drf框架serializer之视图优化(代码片段)

一、create优化在serializer序列化中,我们通过创建序列化器对象的方式大大地简化了视图函数的代码,前端传入的数据通过反序列化操作进行了各种数据校验,代码如下:fromdjango.httpimportJsonResponsefromdjango.viewsimportViewfromdjango.dbimpor... 查看详情

drf序列化(代码片段)

一、安装Django RESTframework框架使用命令:pipinstalldjangorestframework二、在setings里面注册INSTALLED_APPS=["rest_framework"]Serializers序列化组件 查看详情

drf序列化(代码片段)

1.安装pipinstalldjangoframework2.app注册rest_frameworkINSTALLED_APPS=[‘django.contrib.admin‘,‘django.contrib.auth‘,‘django.contrib.contenttypes‘,‘django.contrib.sessions‘,‘django.contrib.messages‘,‘django 查看详情

drf序列化(代码片段)

1.rest-framework序列化之Serializerrest-framework序列化之Serializer步骤1.创建一个类,继承Serializer2.在类中写要序列化的字段‘‘‘classBookSerializer(serializers.Serializer):#序列化表中的某几个字段固定写法nid=serializers.CharField()name=serializers. 查看详情

drf之序列化(代码片段)

目录准备事项序列化组件初见序列化字段ModelSerializer重载create方法单条数据处理现阶段代码准备事项#models.pyfromdjango.dbimportmodelsclassPublisher(models.Model):title=models.CharField(max_length=32)address=models.CharField(max_length=128)d 查看详情

drf框架之serializers序列化组件(代码片段)

1.什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式2.DRF框架自带序列化的工具:serializers 3.DRF框架serializers分为:第一种Serializer 第二种ModelSerializer 第一种用法之Serializerfromdjango.dbimport... 查看详情

drf序列化(代码片段)

 表结构:classArticle(models.Model):id=models.AutoField(primary_key=True)title=models.CharField(max_length=64)create_time=models.DateField(auto_now=True)type=models.SmallIntegerField(choices=((1,‘原创‘ 查看详情

drf序列化组件(代码片段)

modelsfromdjango.dbimportmodels#Createyourmodelshere.classBook(models.Model):nid=models.AutoField(primary_key=True)name=models.CharField(max_length=32)price=models.DecimalField(max_digits=5,decimal_pl 查看详情

drf的序列化(代码片段)

DRF视图APIviewdjango中写CBV的时候是继承View,而rest_framework继承的是APIView,那么他们两个有什么不同urlpatterns=[url(r‘^book$‘,BookView.as_view()),url(r‘^book/(?P<id>d+)$‘,BookEditView.as_view()),] 不管是View还是APIView最开始调用的都 查看详情

drf入门规范(代码片段)

...可以快速的开发RESTAPI接口应用。在RESTframework中,提供了序列化器Serialzier的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。 查看详情

初识drf(代码片段)

目录1.Web应用模式2.api接口3.RESTfulAPI规范4.序列化5.DjangoRest_Framework特点6.环境安装与配置6.1安装DRF6.1.1创建django项目6.2添加rest_framework应用6.3体验drf完全简写代码的过程6.3.0创先子应用6.3.1.创建模型操作类6.3.1.1执行数据迁移6.3.2.创... 查看详情

drf序列化器之请求响应以及视图(代码片段)

1.http请求处理drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作。所以在django原有的django.views.View类基础上,drf封装了多个视图子类出来提供给我们使用。DjangoRESTframwork提供的视图的主要作用:控制序列化器的... 查看详情

drf序列化组件(代码片段)

目录1一序列化器-Serializer1.1定义序列化器1.2创建Serializer对象1.3序列化器的使用1.3.1序列化1.3.1.1基本使用1.3.1.2高级用法source和serializers.SerializerMethodField()的用法1.3.2反序列化1.3.2.1数据验证1)validate_字段名2)validate3)validators1.3.2.2反序... 查看详情

drf序列化组件(代码片段)

rest_framework序列化之Serializer步骤:1.自定义一个类,继承Serializer类;2.在类中写要序列化的字段;3.使用:在views.py文件中,book_ser=BookSerializer(book_list,many=True),book_ser.data就是序列化后的数据。当序列化的数据有多条(为QuerySet对... 查看详情

drf框架(代码片段)

...析模块、渲染模块、响应模块、异常模块四、drf核心组件序列化组件:将后台的任何数据,进行序列化返回给前台;将前台的数据反序列化成后台model对象再入库三大认证组件:认证组件、权限组件(RBAC)、频率组件视图家族:View... 查看详情

drf之序列化组件(代码片段)

1一序列化器-Serializer作用:1.序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串2.反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型3.反序列化,完成数据校验功能1.1定... 查看详情

09.drf-modelserializer(代码片段)

四、模型类序列化器ModelSerializer如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动... 查看详情