drf rest_framework.renders
时间: 2025-02-05 07:36:29 浏览: 36
### Django Rest Framework 渲染器简介
Django Rest Framework (DRF) 提供了多种方式来处理API响应的内容渲染。默认情况下,REST框架支持JSON、HTML表单和其他格式的渲染[^1]。
#### JSONRenderer
最常用的渲染器之一是 `rest_framework.renderers.JSONRenderer` 。此渲染器用于将Python原生数据结构转换为JSON格式的数据。这使得客户端可以轻松解析返回的信息并进一步操作这些信息。
```python
from rest_framework.renderers import JSONRenderer
class ExampleView(APIView):
renderer_classes = [JSONRenderer]
def get(self, request, format=None):
content = {'message': 'Hello world'}
return Response(content)
```
#### BrowsableAPIRenderer
另一个重要的内置渲染器是 `BrowsableAPIRenderer` ,它允许开发者通过浏览器查看API端点,并提供了一个交互式的界面来进行测试和调试工作。这对于开发阶段特别有用,因为它简化了对不同HTTP请求方法的支持以及参数传递的过程。
```python
from rest_framework.renderers import BrowsableAPIRenderer
class SnippetList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
renderer_classes = [BrowsableAPIRenderer]
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
```
#### 自定义渲染器
除了使用预设好的渲染器外,还可以根据项目需求编写自定义渲染器。比如要实现CSV文件下载功能,则可以通过继承BaseRenderer基类来自定义一个专门针对此类场景优化过的renderer:
```python
import csv
from io import StringIO
from rest_framework.renderers import BaseRenderer
class CSVRenderer(BaseRenderer):
media_type = 'text/csv'
format = 'csv'
def render(self, data, accepted_media_type=None, renderer_context=None):
buffer_ = StringIO()
writer = csv.writer(buffer_)
# 假定data是一个列表字典形式的结果集
headers = data[0].keys() if isinstance(data, list) and len(data)>0 else []
writer.writerow(headers)
for item in data:
row = [item.get(key,'') for key in headers]
writer.writerow(row)
return buffer_.getvalue()
```
上述代码展示了如何创建一个新的CSV渲染器,该渲染器会遍历传入的数据并将每一项写入到CSV字符串中去。最后返回这个CSV字符串作为最终输出给用户的响应体内容。
阅读全文
相关推荐

















