视图的用法
1.DRF中的request以及response
DRF中传入视图的request对象 不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。
DRF中传入视图的response对象 REST framework提供了一个响应类Response,使用该类构造响应对象时,响应的具体数据内容会被转换(render渲染)成符合前端需求的类型。
添加配置文件
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
)
}
2.DRF中的视图的优势
首先我们来看不使用DRF,视图怎么实现
通用视图基类与扩展类,以简化视图的编写
# 处理admin站点的请求
class BooksAPIView(View):
# GET /books/
def get(self, request):
books = BookInfo.objects.all()
book_list = []
for book in books:
book_list.append({
'id': book.id,
'btitle': book.btitle,
'bread': book.bread,
'bcomment': book.bcomment,
'is_delete': book.is_delete,
# 注意此处要加上url才能访问到图片的地址
'image': book.image.url if book.image else '',
'bpub_date': book.bpub_date
})
return JsonResponse(book_list, safe=False)
代码块1
怎么样,是不是感觉很复杂。我们的DRF就可以帮我们处理其中的大部分代码而不用我们自己去处理!!!
重点来了,怎么实现呢?
首先我们得了解一下,当我们不去自己继承View类定义类视图时,DRF给哦们提供了几个继承自View类的丰富的类
1.基类:APIView
APIView是REST framework提供的所有视图的基类,继承自Django的View
父类。
APIView
与View
的不同之处在于:
- 传入到视图方法中的是REST framework的
Request
对象,而不是Django的HttpRequeset
对象; - 视图方法可以返回REST framework的
Response
对象,视图会为响应数据设置(render)符合前端要求的格式; - 任何
APIException
异常都会被捕获到,并且处理成合适的响