内部类,drf响应类,序列化与反序列化(代码片段)

godlover godlover     2023-04-17     559

关键词:

内部类

# 概念:将类定义在一个类的内部,被定义的类就是内部类
# 特点:内部类及内部类的所以名称空间,可以直接被外部类访问的
# 应用:通过内部类的名称空间,给外部类额外拓展一些特殊的属性(配置),典型的Meta内部类 - 配置类

class Book(model.Model):
    class Meta:
        db_model = "owen_book"  # 配置自定义表名
        
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = "Book"  # 配置序列化类绑定的Model表

DRF响应类:Response

"""
def __init__(self, data=None, status=None, template_name=None, headers=None,                                exception=False, content_type=None):
    pass
    
data:响应的数据 - 空、字符串、数字、列表、字段、布尔
status:网络状态码
template_name:drf说自己也可以支持前后台不分离返回页面,但是不能和data共存(不会涉及)
headers:响应头(不用刻意去管)
exception:是否是异常响应(如果是异常响应,可以赋值True,没什么用)
content_type:响应的结果类型(如果是响应data,默认就是application/json,所有不用管)
"""

# 常见使用
Response(
    data=
        'status': 0,
        'msg': 'ok',
        'result': '正常数据'
    
)

Response(
    data=
        'status': 1,
        'msg': '客户端错误提示',
    ,
    status=status.HTTP_400_BAD_REQUEST,
    exception=True
)

序列化基类控制的初始化参数

"""
def __init__(self, instance=None, data=empty, **kwargs):
    pass

instance:是要被赋值对象的 - 对象类型数据赋值给instance
data:是要被赋值数据的 - 请求来的数据赋值给data
kwargs:内部有三个属性:many、partial、context
    many:操作的对象或数据,是单个的还是多个的
    partial:在修改需求时使用,可以将所有校验字段required校验规则设置为False
    context:用于视图类和序列化类直接传参使用
"""

# 常见使用
# 单查接口
UserModelSerializer(instance=user_obj)

# 群查接口
UserModelSerializer(instance=user_query, many=True)

# 增接口
UserModelSerializer(data=request.data)

# 整体改接口
UserModelSerializer(instance=user_obj, data=request.data)

# 局部改接口
UserModelSerializer(instance=user_obj, data=request.data, partial=True)

# 删接口,用不到序列化类

反序列化

views.py

class UserAPIView(APIView):
    def post(self, request, *args, **kwargs):
        # 单增
        # 1)将前台请求的数据交给序列化类处理
        # 2)序列化类执行校验方法,对前台提交的所有数据进行数据校验:校验失败就是异常返回,成功才能继续
        # 3)序列化组件完成数据入库操作,得到入库对象
        # 4)响应结果给前台
        serializer = serializers.UserModelSerializer(data=request.data)
        if serializer.is_valid():
            # 校验成功 => 入库 => 正常响应
            obj = serializer.save()
            return Response(
                'status': 0,
                'msg': 'ok',
                'result': '新增的那个对象'
            , status=status.HTTP_201_CREATED)
        else:
            # 校验失败 => 异常响应
            return Response(
                'status': 1,
                'msg': serializer.errors,
            , status=status.HTTP_400_BAD_REQUEST)

serializers.py

"""
标注:序列化 => 后台到前台(读)  |  反序列化 => 前台到后台(写)
1)不管是序列化还是反序列化字段,都必须在fields中进行声明,没有声明的不会参与任何过程(数据都会被丢弃)

2)用 read_only 表示只读,用 write_only 表示只写,不标注两者,代表可读可写

3)
i)自定义只读字段,在model类中用@property声明,默认就是read_only
@property
def gender(self):
    return self.get_sex_display()
    
ii)自定义只写字段,在serializer类中声明,必须手动明确write_only
re_password = serializers.CharField(write_only=True)

特殊)在serializer类中声明,没有明确write_only,是对model原有字段的覆盖,且可读可写
password = serializers.CharField()

4)用 extra_kwargs 来为 写字段 制定基础校验规则(了解)

5)每一个 写字段 都可以用局部钩子 validate_字段(self, value) 方法来自定义校验规则,成功返回value,失败抛出 exceptions.ValidationError('异常信息') 异常

6)需要联合校验的 写字段们,用 validate(self, attrs) 方法来自定义校验规则,,成功返回attrs,失败抛出 exceptions.ValidationError('异常字段': '异常信息') 异常

7)extra_kwargs中一些重要的限制条件
    i)'required':代表是否必须参与写操作,有默认值或可以为空的字段,该值为False;反之该值为True;也可以手动修改值
"""

"""
开发流程:
1)在model类中自定义 读字段,在serializer类中自定义 写字段
2)将model自带字段和所以自定义字段书写在fields中,用write_only和read_only区别model自带字段
3)可以写基础校验规则,也可以省略
4)制定局部及全局钩子
"""

序列化组件serializer之序列化与反序列化(代码片段)

一、知识补充1、序列化与反序列化"""1)序列化组件单表序列化(后台数据返回给前台):将后台的数据对象,转换成能用于网络传输的过程,即又是将对象转换成二进制字符串单表反序列化(前台提交数据给后台):拿内存的数据转... 查看详情

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

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

modelserializer类序列操作(代码片段)

目录ModelSerializer类序列化mysql配置:单表序列化与反序列化操作:ModelSerializer类序列化与反序列化:put更新:post新增:单删:ModelSerializer类序列化mysql配置:#settings.pyDATABASES='default':'ENGINE':'django.db.backends.mysql','NAM... 查看详情

django-rest-framework---总结(代码片段)

...果渲染数据的方式不一样3.解析模块4.异常模块5.响应模块序列化组件:1.Serializer2.序列化与反序列化整合(重点)3.整体单改4.单与整体局部修改视图类视图类传递参数给序列化类二次封装Response类视图家族GenericAPIView基类mixins视... 查看详情

drf入门规范(代码片段)

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

drf---序列化(代码片段)

...2)在settings中配置执行自定义异常处理函数"""序列化家族"""1、Serializer类:底层序列化类-了解类重点:单表序列化2、ModelSerializer类:模型序列化类-核心类重点:多表序列化3、ListSerializer类:群操作序列化... 查看详情

drf高级二序列化器(代码片段)

序言序列化器是drf非常好用的一个功能!美酒虽好,切莫贪杯。合适的位置做合适的事情。drf非常擅长列表类,非图表类。此时,基础的视图是一个比较好的选择。序列化器序列化分为正序列化和反序列化。正序列化:models对象... 查看详情

drf视图类关系详解(代码片段)

...ery_params,重写了__getattr__,request._request#3json模块是否执行反序列化bytes格式#4考你:视图类的方法中:self.request,就是当次请求的request#5Response:类,实例化传一堆参,data=字典,status=状态码( 查看详情

09.drf-modelserializer(代码片段)

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

16-drf工程搭建与序列化器(代码片段)

...amework‘,]使用DjangoRESTframework快速实现图书的RESTAPI2、创建序列化器1、在Book应用下新建serializers.py用于保存该应用的序列化器,创建一个BookInfoSerializer用于序列化与反序列化。fromrest_frameworkimportserializersfromBook.modulesimportBookInfoclassB... 查看详情

drf序列化(代码片段)

目录序列化家族SerializerModelSerializerListSerializerSerializer序列化(了解)视图类序列化类Serializer反序列化(了解)视图类序列化类ModelSerializer序列化和反序列化(重点)视图类序列化类模型类序列化家族Serializer底层序列化重点:单表... 查看详情

序列化模块知识要点(代码片段)

目录三流:标准输入流:标准输出流:标准错误流:序列化家族1、serializer类:底层序列化类--了解2、modelserializer类:模型序列化类--核心类3、ListSerializer类:群操作序列化类--辅助类models.py中注意事项:Serializer序列化(了解)drf序... 查看详情

gson关于抽象类的序列化与反序列化(代码片段)

Gson关于抽象类的序列化与反序列化背景知识Gson是Google推出的Java对象与Json对象的之间转换的Java类库,需要将Java对象序列化时,使用 Aa=newA();//Java对象序列化成StringGsongson=newGson();//String反序列成Java对象StringjsonStr=gson.toJson(a);Ar... 查看详情

(13)c#传智:访问修饰符,简单工厂模式,序列化与反序列化,部分类,密封类,接口(第13天)(代码片段)

内容超级多,慢慢来。。。      深入BinaryFormatter   一、访问修饰符   public:公共的,公开的   private:私有的,只能在当前类的内部访问   protected:受保持的,只能在当前类的内部和该类的子类中访问。 ... 查看详情

使用drf的序列化类实现增删改查接口(代码片段)

...基于rest_framework的增删改查查询多条数据流程创建表创建序列化类创建视图类增加路由查询单条数据序列化类不变视图类定义对象新增路由新增一条数据序列化类视图类修改一条数据视图类删除一条数据序列化之钩子函数校验局... 查看详情

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

目录一、APIView的请求生命周期二、序列化组件视图类中使用序列化Meta配置类中的配置自定义校验规则入库方法自定义字段如果有群改操作重(难)点三、视图家族四、路由组件五、权限认证一、APIView的请求生命周期'''1)... 查看详情

序列化与反序列化(代码片段)

定义:将类通过字节流的方式写入文件称为序列化,从类文件中通过字节流的方式读取出来称为反序列化序列化:类要实现Serializable接口,才能序列化,Serializable接口没有任何抽象方法,是一个标记接口try(ObjectOutputStreamseri=newObjectOutputStr... 查看详情

序列化与反序列化(代码片段)

序列化和反序列化的三种方法:1.使用JavaScriptSerializer类2.使用DataContractJsonSerializer类3.使用JSON.NET类库第一种方法://使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dll.中usingSystem.Web.Script.Serialization;1.... 查看详情