生命周期
路由中的as_view是突破口,我们的cbv函数是继承了的apiview,
apiwiew是先调用了view中的as_view,然后禁用了所有的继承了apiview的子类csrf
然后在view调用了apiview中disbach方法,所以以后的drf中的所有的模块
都是以apiview中的disbach作为入口,分发各个模块
请求模块
在get请求中取值我们用,request.query_params
在psot请求中取值我们用, request.data
源码解析,,先进入了dispach,可以看到一个request的一个类
类中就对request进行了二次封装
渲染模块
在apisttings中我们看尽如果是要自定义渲染样式,就得安装注释的方法在自己的settings中
将配置文件拷贝,然后在将自己的类中,
from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
renderer_classes =[JSONRenderer,BrowsableAPIRenderer]
源码解析,,
先进入,渲染的接口,然后你面我们要得到一个renderer,对象,而且要返回到页面,
得到这个对象,的一个renderer_list就是在apiview中,这里我们要设置全局的或是局部的,就进入apisettings,将配置拷贝
解析模块
from rest_framework.parsers import JSONParser
parser_classes = [JSONParser]
源码解析
进入dispatch,
在进入parsers=self.get_parsers()
然后就是到apiview中的parsers_list,拷贝,parsers的配置到本地
异常模块
在app中新建一个py文件
在文件中重写exception_handler方法
在调用原来的exception_handler方法,得到一个response,判断是否为空,
我们只改为空的的response,给他返回一个Respose对象,
最后将原来的exception_handler这个的返回值返回
在settings中我们还要设置配置
'EXCEPTION_HANDLER': 'api.exception.exception_handler',
在视图函数中我们通过get获取错误
后面的路由的有名分组,是不需要?后面拼接参数的,直接跟参数就可以了
响应模块
return Response(data={数据}, status=status.HTTP_200_OK, headers={设置的响应头})
序列化
与前端的forms组件,格式差不多,我们先要导入
然后在view视图类中的将book_obj放入我们穿件的自定义组件中。data就可以转换为字典
from rest_framework import serializers,exceptions
book_obj = Userserializer(book_obj).data
反序列化
还是要写个类
和上面的序列化是一样的,只是在字段括号内需要写入限制详细,和错误信息,
然后还可以配置局部钩子,和全局钩子,
最后所有数据都符合了,就重写create方法,返回对象
在viwe视图函数中,
我们先判断前端穿传来的数据是否是正确的,如果不是就直接返回状态详细信息
如果数据是正确的,我们直接将我们写好的主键导入过来,然后将数据传入,以data=与的形式,返回一个返回值
我们通过这个返回值,点is_valid()来半段数据是否经过校验,如果校验成功,得到book_obj
book_ser.save()
然后我们返回前端消息,在result中可以直接使用序列化,就可以了