前面的文章已经介绍过APIView与View的区别,或者说APIView比View更为强大的地方(文章链接:https://blog.csdn.net/weixin_47454485/article/details/107461486):
- 1.传入到视图方法中的是Request对象,而不是Django的HttpRequest对象
- 2.视图方法可以返回Response对象,自动处理(根据请求头的参数)为符合前端要求的格式
- 3.任何APIException异常都会被捕获到,并且处理成合适的响应信息
- 4.在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制
本文继续通过对比源码的方式来对以上4点进行分析
1.首先需要弄明白一个问题:
自定义一个视图类,继承View,又另外定义一个视图类,继承APIView,
问:这两个类的请求分别走的是哪个类的哪个函数,从as_view()和dispatch()来分析
答:继承View的自定义类请求走的View的dispatch()方法,继承APIView的自定义类请求走的APIView的dispatch()(可以参考前面的文章:https://blog.csdn.net/weixin_47454485/article/details/107505904)
2.明白了这个请求周期后可以发现,一个请求周期中最重要的函数就是dispatch(),进一步可以得出:APIView比View更为强高级之处就是APIView的dispatch()比View的dispatch()高级
3.对比源码
查看View的dispatch()方法,前面的文章已经讲过它的