1.复习内容
-
getattr(),hasattr(),setattr()使用
- getattr(object, name[, default]) default是返回的默认值
- 获取到方法,可以被执行
- hasattr(object, name)
- setattr(object, name, value)
-
序列化器 create和update的参数是什么类型
- 都是一个字典类型
-
序列化器read_only和write_only
- read_only
- 序列化时候使用,可以判断验证码
- read_only 只能读不能写
- read_only的字段在serializer中效验使用
- 常使用在id字段,可以读,不能写
- write_only
- 反序列化时候时候使用
- write_only 只能写不能读
- 常使用在password
-
python魔法属性 __dict__
-
django safe属性
- safe将html生成安全的文本,
- 将整型转为字符串:
-
exceptions.ValidationError:
- ["'3' value must be either True or False."]
- 数据库中将bool字段设置成了3,
- 数据库中真=1,假=0
-
serializer_class = Serializer
- 不要加括号~
-
动态给对象添加方法
- MethodType()
- 1.绑定到对象
- 对象.方法名 = methodType(方法名,对象名,类名)
- 2.绑定到类(有None)
- 类.方法名 = methodType(方法名,类名)
- 3.绑定到类(没None)
- 类.方法名 = methodType(方法名,类名)
- https://blog.csdn.net/yuanyangsdo/article/details/60776612
2.灵感代办
- assert 使用
3.学习内容
-
ModelSerializer模型类
-
作用:
- 根据model自动生成属性
- 方便修改添加属性字段
- 继承自Serializer 实现了create ,update方法
-
使用:
- 1.继承ModelSerializer模型类
- 2.定义类Meta 定义属性
- model = 模型类
- fields = (需要生成的字段,)
- 自动生成的字段,不满足需要,就直接在类中指定字段选项参数
- fields = “__all__” 所有字段
- extra_kwargs={“bcomment”:{max_value:100}} 也是指定字段选项参数
- exclude = (‘取反的字段’)
- read_only_fields=(字段,) 给字段添加read_only
- 3.已经定义了create(),和update()方法
- 4.数据验证只有unique实现
- 自动实现unique验证方法
- 别的数据验证方式还是使用 validate_field_name()方法
-
技巧:
- 可以指定没有的字段 (验证码),要么fields是all,要么要给field指定
-
出现错误:
- 应该继承ModelSerializer,(不要继承ModelField)
-
两个基本类视图
-
APIView
- 继承自django的View
- 增加了
- 权限功能,组管理员
- 认证功能,账号密码
- 限流功能,ip访问次数,限制单ip爬虫程序
- 使用方法:
- 1.继承APIView
- 2.request的
- request.data 自动转换成json 表单文件接收
- request.query_param() 查询字符串接收
- 3.Response()返回对象
- 不用safe
-
GenericApiView
- 继承自ApiView
- 分页功能
- 过滤排序功能
- 指定查询集 (惰性查询,缓存数据)
- queryset= 查询集 model.objects.all()
- 指定序列化器 整个类使用一个序列化器
- serializer_class = 序列化器
- 注意 序列化器不要加括号
- 使用方法:
- 继承GenericApiView
- 指定查询集 queryset (数据库中的数据)
- 指定序列化器 serializer_class
- 使用查询集/序列化器
- get_queryset()
- get_serializer(instance=books,data=data,many=True)
- get_object() 获取单一数据对象
-
五大拓展类(配合GenericAPIView)
- 作用:
- 继承自object
- 封装了增删改查方法
- 注意:
- 需要定义查询集和序列化器queryset serializer_class
- 使用:
- 1.继承GenericApiView
- 2.继承扩展类
- 3.在get或post中 return 调用self.cretae() self.list() …
- LIstModelMixin 获取多个数据
- list()
- CreateModelMixin 保存数据
- create()
- RetrieveModelMixin 获取单一数据
- retrieve()
- UpdateModelMixin 更新数据
- update()
- DestoryModeMixin 删除数据
- destory()
-
五大扩展类子类
- 作用:
- 更简化代码,post和get都已经实现
- 需要定义查询集和序列化器queryset serializer_class
-
视图集()
- 路由匹配规则,视图定义方法改变(post,get)
- 两个基本视图集
- ViewSet 继承自APIView
- GenericViewset 继承自GenericAPIView
- 两个拓展视图集
- ModelViewSet 继承GenericAPIView 继承五个拓展类
- 增删改查功能
- ReadOnlyViewSet 继承了GenericAPIVIew 继承了ListModelMixin ,RetrieveModelMixin
- 单一多个数据获取
-
视图集ViewSet的使用方法
- (区别命名形式,路由定义)
- 1.继承ViewSet
- 2.自定义方法,整体和post,get还是差不多
- 3.路由定义 as_view({}) 传递一个字典,”get”:自定义方法,post:”自定义方法”
- list(),create(),update(),destory(),resrieve()
- 4.自定义方法,路由器匹配
- url(r^books/list_data$,views.as_views({“get”,”last_data“}))
-
视图集GenericViewSet的使用方法
- 1.指定queryset,指定serializer_class
- 2.和GenericAPIView使用方式差不多
- 3.路由定义 as_view({}) 传递一个字典,”get”:自定义方法,post:”自定义方法”list(),create(),update(),destory(),resrieve()
- 4.自定义方法,路由器匹配url(r^books/list_data$,views.as_views({“get”,”last_data“}))
-
拓展视图集ModelViewSet的使用方法
- 1.指定queryset,指定serializer_class】
- 2.增删改查全部已经自动动被实现
- 3.路由匹配规则和视图集的匹配规则一致
-
自动生成路由SimpleRouter(需要类是视图集)
- DefaultRouter 是 SimpleRouter使用方式一样
- 多了一个首页匹配 “/”
- 视图集:ViewSet、GenericViewSet、ModelViewSet
- 1.在url中导入SimpleRouter
- 2.生成一个路由对象
- router = SimpleRouter()
- 3.注册一个路由
- router.register(‘books_drf’,modelview.Books,base_name=’‘books’)
- 1.路由路径
- 2.视图类
- 3.路由的命名空间
- 4.获取router.urls,放入ulrpatterns
- 5.自定义视图类 不会自动生成路由
- @action(methods=[‘get’],detail=True)
- 参数1:匹配的方法
- 参数2:detail匹配多余参数 比如id (正则匹配)
- self.action 属性 就是自定义视图方法名称
-
指定不同的Serializer
- 重写方法get_serializer_class()
- 在方法中判断self.action属性,
- 根据不同的self.action返回不同的序列号器
4.扩展延伸知识
-
DRF中ser.error_messages属性
- 是查看定义错误信息
-
在Serializer中定义的create 和update返回的对象是?
- 都是model类的实例,create需要在里面创建实例
- update的instance就是实例,需要save()数据
-
字典取出数据可以试试pop
- 只读取数据情况下适用
- 框架中取出字典都是用pop(‘key’)
-
HTTP方法作用
- get 获取单条 多条数据、
- post 创建一个新数据
- put 更新数据
- delete 删除数据
5.知识内容个人梳理
6.今天都复习了之前的什么内容
getattr(),hasattr(),setattr()使用
- getattr(object, name[, default]) default是返回的默认值
- 获取到方法,可以被执行
- hasattr(object, name)
- setattr(object, name, value)
序列化器 create和update的参数是什么类型
- 都是一个字典类型
序列化器read_only和write_only
- read_only
- 序列化时候使用,可以判断验证码
- read_only 只能读不能写
- read_only的字段在serializer中效验使用
- 常使用在id字段,可以读,不能写
- write_only
- 反序列化时候时候使用
- write_only 只能写不能读
- 常使用在password
python魔法属性 __dict__
django safe属性
- safe将html生成安全的文本,
- 将整型转为字符串:
exceptions.ValidationError:
- ["'3' value must be either True or False."]
- 数据库中将bool字段设置成了3,
- 数据库中真=1,假=0
serializer_class = Serializer
- 不要加括号~
动态给对象添加方法
- MethodType()
- 1.绑定到对象
- 对象.方法名 = methodType(方法名,对象名,类名)
- 2.绑定到类(有None)
- 类.方法名 = methodType(方法名,类名)
- 3.绑定到类(没None)
- 类.方法名 = methodType(方法名,类名)
- https://blog.csdn.net/yuanyangsdo/article/details/60776612
- assert 使用
3.学习内容
-
ModelSerializer模型类
-
作用:
- 根据model自动生成属性
- 方便修改添加属性字段
- 继承自Serializer 实现了create ,update方法
-
使用:
- 1.继承ModelSerializer模型类
- 2.定义类Meta 定义属性
- model = 模型类
- fields = (需要生成的字段,)
- 自动生成的字段,不满足需要,就直接在类中指定字段选项参数
- fields = “__all__” 所有字段
- extra_kwargs={“bcomment”:{max_value:100}} 也是指定字段选项参数
- exclude = (‘取反的字段’)
- read_only_fields=(字段,) 给字段添加read_only
- 3.已经定义了create(),和update()方法
- 4.数据验证只有unique实现
- 自动实现unique验证方法
- 别的数据验证方式还是使用 validate_field_name()方法
-
技巧:
- 可以指定没有的字段 (验证码),要么fields是all,要么要给field指定
-
出现错误:
- 应该继承ModelSerializer,(不要继承ModelField)
-
两个基本类视图
-
APIView
- 继承自django的View
- 增加了
- 权限功能,组管理员
- 认证功能,账号密码
- 限流功能,ip访问次数,限制单ip爬虫程序
- 使用方法:
- 1.继承APIView
- 2.request的
- request.data 自动转换成json 表单文件接收
- request.query_param() 查询字符串接收
- 3.Response()返回对象
- 不用safe
-
GenericApiView
- 继承自ApiView
- 分页功能
- 过滤排序功能
- 指定查询集 (惰性查询,缓存数据)
- queryset= 查询集 model.objects.all()
- 指定序列化器 整个类使用一个序列化器
- serializer_class = 序列化器
- 注意 序列化器不要加括号
- 使用方法:
- 继承GenericApiView
- 指定查询集 queryset (数据库中的数据)
- 指定序列化器 serializer_class
- 使用查询集/序列化器
- get_queryset()
- get_serializer(instance=books,data=data,many=True)
- get_object() 获取单一数据对象
-
五大拓展类(配合GenericAPIView)
- 作用:
- 继承自object
- 封装了增删改查方法
- 注意:
- 需要定义查询集和序列化器queryset serializer_class
- 使用:
- 1.继承GenericApiView
- 2.继承扩展类
- 3.在get或post中 return 调用self.cretae() self.list() …
- LIstModelMixin 获取多个数据
- list()
- CreateModelMixin 保存数据
- create()
- RetrieveModelMixin 获取单一数据
- retrieve()
- UpdateModelMixin 更新数据
- update()
- DestoryModeMixin 删除数据
- destory()
-
五大扩展类子类
- 作用:
- 更简化代码,post和get都已经实现
- 需要定义查询集和序列化器queryset serializer_class
-
视图集()
- 路由匹配规则,视图定义方法改变(post,get)
- 两个基本视图集
- ViewSet 继承自APIView
- GenericViewset 继承自GenericAPIView
- 两个拓展视图集
- ModelViewSet 继承GenericAPIView 继承五个拓展类
- 增删改查功能
- ReadOnlyViewSet 继承了GenericAPIVIew 继承了ListModelMixin ,RetrieveModelMixin
- 单一多个数据获取
-
视图集ViewSet的使用方法
- (区别命名形式,路由定义)
- 1.继承ViewSet
- 2.自定义方法,整体和post,get还是差不多
- 3.路由定义 as_view({}) 传递一个字典,”get”:自定义方法,post:”自定义方法”
- list(),create(),update(),destory(),resrieve()
- 4.自定义方法,路由器匹配
- url(r^books/list_data$,views.as_views({“get”,”last_data“}))
-
视图集GenericViewSet的使用方法
- 1.指定queryset,指定serializer_class
- 2.和GenericAPIView使用方式差不多
- 3.路由定义 as_view({}) 传递一个字典,”get”:自定义方法,post:”自定义方法”list(),create(),update(),destory(),resrieve()
- 4.自定义方法,路由器匹配url(r^books/list_data$,views.as_views({“get”,”last_data“}))
-
拓展视图集ModelViewSet的使用方法
- 1.指定queryset,指定serializer_class】
- 2.增删改查全部已经自动动被实现
- 3.路由匹配规则和视图集的匹配规则一致
-
自动生成路由SimpleRouter(需要类是视图集)
- DefaultRouter 是 SimpleRouter使用方式一样
- 多了一个首页匹配 “/”
- 视图集:ViewSet、GenericViewSet、ModelViewSet
- 1.在url中导入SimpleRouter
- 2.生成一个路由对象
- router = SimpleRouter()
- 3.注册一个路由
- router.register(‘books_drf’,modelview.Books,base_name=’‘books’)
- 1.路由路径
- 2.视图类
- 3.路由的命名空间
- 4.获取router.urls,放入ulrpatterns
- 5.自定义视图类 不会自动生成路由
- @action(methods=[‘get’],detail=True)
- 参数1:匹配的方法
- 参数2:detail匹配多余参数 比如id (正则匹配)
- self.action 属性 就是自定义视图方法名称
-
指定不同的Serializer
- 重写方法get_serializer_class()
- 在方法中判断self.action属性,
- 根据不同的self.action返回不同的序列号器
4.扩展延伸知识
-
DRF中ser.error_messages属性
- 是查看定义错误信息
-
在Serializer中定义的create 和update返回的对象是?
- 都是model类的实例,create需要在里面创建实例
- update的instance就是实例,需要save()数据
-
字典取出数据可以试试pop
- 只读取数据情况下适用
- 框架中取出字典都是用pop(‘key’)
-
HTTP方法作用
- get 获取单条 多条数据、
- post 创建一个新数据
- put 更新数据
- delete 删除数据
5.知识内容个人梳理
6.今天都复习了之前的什么内容
ModelSerializer模型类
-
作用:
- 根据model自动生成属性
- 方便修改添加属性字段
- 继承自Serializer 实现了create ,update方法
-
使用:
- 1.继承ModelSerializer模型类
- 2.定义类Meta 定义属性
- model = 模型类
- fields = (需要生成的字段,)
- 自动生成的字段,不满足需要,就直接在类中指定字段选项参数
- fields = “__all__” 所有字段
- extra_kwargs={“bcomment”:{max_value:100}} 也是指定字段选项参数
- exclude = (‘取反的字段’)
- read_only_fields=(字段,) 给字段添加read_only
- 3.已经定义了create(),和update()方法
- 4.数据验证只有unique实现
- 自动实现unique验证方法
- 别的数据验证方式还是使用 validate_field_name()方法
-
技巧:
- 可以指定没有的字段 (验证码),要么fields是all,要么要给field指定
-
出现错误:
- 应该继承ModelSerializer,(不要继承ModelField)
两个基本类视图
-
APIView
- 继承自django的View
- 增加了
- 权限功能,组管理员
- 认证功能,账号密码
- 限流功能,ip访问次数,限制单ip爬虫程序
- 使用方法:
- 1.继承APIView
- 2.request的
- request.data 自动转换成json 表单文件接收
- request.query_param() 查询字符串接收
- 3.Response()返回对象
- 不用safe
-
GenericApiView
- 继承自ApiView
- 分页功能
- 过滤排序功能
- 指定查询集 (惰性查询,缓存数据)
- queryset= 查询集 model.objects.all()
- 指定序列化器 整个类使用一个序列化器
- serializer_class = 序列化器
- 注意 序列化器不要加括号
- 使用方法:
- 继承GenericApiView
- 指定查询集 queryset (数据库中的数据)
- 指定序列化器 serializer_class
- 使用查询集/序列化器
- get_queryset()
- get_serializer(instance=books,data=data,many=True)
- get_object() 获取单一数据对象
- 继承自ApiView
五大拓展类(配合GenericAPIView)
- 作用:
- 继承自object
- 封装了增删改查方法
- 注意:
- 需要定义查询集和序列化器queryset serializer_class
- 使用:
- 1.继承GenericApiView
- 2.继承扩展类
- 3.在get或post中 return 调用self.cretae() self.list() …
- LIstModelMixin 获取多个数据
- list()
- CreateModelMixin 保存数据
- create()
- RetrieveModelMixin 获取单一数据
- retrieve()
- UpdateModelMixin 更新数据
- update()
- DestoryModeMixin 删除数据
- destory()
五大扩展类子类
- 作用:
- 更简化代码,post和get都已经实现
- 需要定义查询集和序列化器queryset serializer_class
视图集()
- 路由匹配规则,视图定义方法改变(post,get)
- 两个基本视图集
- ViewSet 继承自APIView
- GenericViewset 继承自GenericAPIView
- 两个拓展视图集
- ModelViewSet 继承GenericAPIView 继承五个拓展类
- 增删改查功能
- ReadOnlyViewSet 继承了GenericAPIVIew 继承了ListModelMixin ,RetrieveModelMixin
- 单一多个数据获取
- ModelViewSet 继承GenericAPIView 继承五个拓展类
视图集ViewSet的使用方法
- (区别命名形式,路由定义)
- 1.继承ViewSet
- 2.自定义方法,整体和post,get还是差不多
- 3.路由定义 as_view({}) 传递一个字典,”get”:自定义方法,post:”自定义方法”
- list(),create(),update(),destory(),resrieve()
- 4.自定义方法,路由器匹配
- url(r^books/list_data$,views.as_views({“get”,”last_data“}))
视图集GenericViewSet的使用方法
- 1.指定queryset,指定serializer_class
- 2.和GenericAPIView使用方式差不多
- 3.路由定义 as_view({}) 传递一个字典,”get”:自定义方法,post:”自定义方法”list(),create(),update(),destory(),resrieve()
- 4.自定义方法,路由器匹配url(r^books/list_data$,views.as_views({“get”,”last_data“}))
拓展视图集ModelViewSet的使用方法
- 1.指定queryset,指定serializer_class】
- 2.增删改查全部已经自动动被实现
- 3.路由匹配规则和视图集的匹配规则一致
自动生成路由SimpleRouter(需要类是视图集)
- DefaultRouter 是 SimpleRouter使用方式一样
- 多了一个首页匹配 “/”
- 视图集:ViewSet、GenericViewSet、ModelViewSet
- 1.在url中导入SimpleRouter
- 2.生成一个路由对象
- router = SimpleRouter()
- 3.注册一个路由
- router.register(‘books_drf’,modelview.Books,base_name=’‘books’)
- 1.路由路径
- 2.视图类
- 3.路由的命名空间
- router.register(‘books_drf’,modelview.Books,base_name=’‘books’)
- 4.获取router.urls,放入ulrpatterns
- 5.自定义视图类 不会自动生成路由
- @action(methods=[‘get’],detail=True)
- 参数1:匹配的方法
- 参数2:detail匹配多余参数 比如id (正则匹配)
- self.action 属性 就是自定义视图方法名称
- @action(methods=[‘get’],detail=True)
指定不同的Serializer
- 重写方法get_serializer_class()
- 在方法中判断self.action属性,
- 根据不同的self.action返回不同的序列号器
-
DRF中ser.error_messages属性
- 是查看定义错误信息
-
在Serializer中定义的create 和update返回的对象是?
- 都是model类的实例,create需要在里面创建实例
- update的instance就是实例,需要save()数据
-
字典取出数据可以试试pop
- 只读取数据情况下适用
- 框架中取出字典都是用pop(‘key’)
-
HTTP方法作用
- get 获取单条 多条数据、
- post 创建一个新数据
- put 更新数据
- delete 删除数据
5.知识内容个人梳理
6.今天都复习了之前的什么内容