01-解析器
REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求。还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型。
注意: 开发客户端应用程序时应该始终记住在HTTP请求中发送数据时确保设置Content-Type
头。
如果你不设置内容类型,大多数客户端将默认使用'application/x-www-form-urlencoded'
,而这可能并不是你想要的。
举个例子,如果你使用jQuery的.ajax() 方法发送json
编码数据,你应该确保包含contentType:'application / json'
设置。
02-全局配置解析器
# 全局配置
REST_FRAMEWORK = {
# 版本
"DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.URLPathVersioning",
# 解析器
"DEFAULT_PARSER_CLASSES": (
"rest_framework.parsers.JSONParser",
"rest_framework.parsers.FormParser"
)
}
注意:
1. 当你的项目中只配置了 JSONParser 解析器时,你的项目现在就只能解析JSON格式的数据了,客户端如果使用浏览器提交,那么你将无法解析。
2. 在视图类中定义的配置项的优先级要高于全局配置中的配置项。
03-单个视图配置解析器
class BookViewSet(ModelViewSet):
queryset = models.Book.objects.all()
serializer_class = BookModelSerializer
# JSONParser:表示只能解析content-type:application/json的头
# FormParser:表示只能解析content-type:application/x-www-form-urlencoded的头
parser_classes = [JSONParser, ]
04-自定义解析器
要实现一个自定义解析器,你应该重写BaseParser
,设置.media_type
属性,并实现.parse(self,stream,media_type,parser_context)
方法。
该方法应该返回用于填充request.data
属性的数据。
class PlainTextParser(BaseParser):
"""
Plain text 解析器。
"""
media_type = 'text/plain'
def parse(self, stream, media_type=None, parser_context=None):
"""
只需返回一个表示请求正文的字符串。
"""
return stream.read()
05-渲染器
视图的有效渲染器集合始终被定义为一个元素都是类的列表。当输入视图时,REST框架将对传入请求执行内容协商,并确定最适合的渲染器来满足请求。
drf提供的渲染器有很多,默认是:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
)
}
06-全局设置
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
),
}
注意,在视图类中定义的配置项的优先级要高于全局配置中的配置项。
07-局部设置
class PublisherViewSet(ModelViewSet):
queryset = models.Publisher.objects.all()
serializer_class = PublisherModelSerializer
renderer_classes = [JSONRenderer, ]
这样设置后就只能返回JSON格式的数据了,并不会像之前一样提供一个阅读友好的web页面。
详解:https://q1mi.github.io/Django-REST-framework-documentation/api-guide/renderers_zh/
来源:oschina
链接:https://my.oschina.net/u/4409224/blog/4088470