DRF中的Request

Posted haowen980

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DRF中的Request相关的知识,希望对你有一定的参考价值。

2018-08-02

1. 内容回顾
	1. Serializer(序列化)
		1. ORM对应的query_set和ORM对象转换成JSON格式的数据
			1. 在序列化类中定义自定义的字段:SerializerMethodField
				在类中定义 get_自定义字段名(self, obj)方法
			2. read_only 只在显示(查询)时才会有效。
		
		2. 对前端POST过来的数据做有效性的校验
			1. 一定要将数据以data=的形式传递到序列化类中!!!
				ser_obj = CommentSerializer(data=comment_data) 
			2. 判断数据是否有效
				ser_obj.is_valid():  欠一个源码
				ser_obj.validated_data 中保存经过校验的有效数据
			
			3. 局部钩子
				定义一个validate_字段名(self, value)
			4. 全局钩子
				定义一个validate方法
				
		3. .save()方法将符合要求的数据存入数据库
			1. 本质上还是调用ORM的create()方法
			类名.objects.create(**ser_obj.validated_data)
			
	2. 超链接的序列化
		1. 超连接字段的三个参数
		# 文章超链接序列化
		class ArticleHyperLinkedSerializer(serializers.HyperlinkedModelSerializer):
			# view_name参数 默认使用 表名-detail
			# lookup_url_kwarg参数 默认使用pk,指的是反向生成URL的时候 路由中的分组命名匹配的key
			# lookup_field参数 默认使用的pk, 指的是反向生成URL的时候, 路由中分组命名匹配的value
			school = serializers.HyperlinkedIdentityField(
				view_name=‘school-detail111‘,
				lookup_url_kwarg=‘name‘,
				lookup_field=‘school_name‘
			)
		2. 想要生成完整的超链接API,在序列化的时候还要传入 context={‘request‘: request}
		   ser_obj = app01_serializers.ArticleHyperLinkedSerializer(all_article, many=True, context={‘request‘: request})
		   1. 想要生成相对路径
				context={‘request‘: None}

2. 今日内容
	1. 面向对象的三大特性
		1. 封装
			1. 把共有的数据当成一类物体的属性
			2. 把共有的功能当成一类物体的方法
			
		2. 继承
			1. 把共有的属性或方法抽离出来放到一个基类(父类)中
		3. 多态
			1. 不同的物体调用同一个方法有不同的效果
				Python中数字的+和字符串的+
	2. 葫芦娃的故事
		五个娃
		   ↓
		奇数娃和偶数娃
		   ↓
		 套娃
	3. GenericAPIView和五个混合类的组合使用
	
	4. RetrieveUpdateDestroyAPIView和ListCreateAPIView的使用
	
	5. ModelViewSet的使用
	
	6. ModelViewSet Router的使用
				

  

在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等。

比如,区别于Django中的request从request.GET中获取URL参数,从request.POST中取某些情况下的POST数据。

技术分享图片

 

在APIView中封装的request,就实现了请求数据的解析:

对于GET请求的参数我们通过request.query_params来获取。

对于POST请求、PUT请求的数据我们通过request.data来获取。

 

以上是关于DRF中的Request的主要内容,如果未能解决你的问题,请参考以下文章

DRF 中的异步请求错误

06 drf源码剖析之权限

drf获取请求过来时的request

DRF-解析器组件源码解析

DRF 版本 认证

DRF模块