问题:
在使用rest framework开发过程中,客户端向服务器发送请求,服务器处理后,将结果返回给客户端。遇到一个奇怪的问题,客户端收到的返回结果,在命令行下查看,全是一大串的html标签(实际上是rest framework api的页面)。而实际上,我们期望返回的是我们填写的提示信息,例如,”时间格式错误”,“参数太长”,“成功”等等。
这个肿么解决呢?
解决办法:
查看DEBUG
首先怀疑的是settings中的DEBUG问题,经过测试,证明与其无关。
APIException
服务器经常使用raise APIException来向客户端返回处理结果。APIException作为返回结果的方式,会不会是这里的问题导致客户端收到是html标签呢?
接着,查看关于exception 的定义
exception in Django rest framework views exception
http://www.django-rest-framework.org/api-guide/exceptions/也没有获取到有用的信息。
rest framework render
最后想到是rest framework render的问题。render完成结果的渲染,是用html格式还是json格式。rest framework 的配置是通过django settings文件中的REST_FRAMEWORK来定义的。例如,工程的settings文件中可能有类似如下的定义:
REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', ), 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', ) }
如果render定义如下:
REST_FRAMEWORK = { ... 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.BrowsableAPIRenderer', 'rest_framework.renderers.JSONRenderer', ), ... }
则返回的是html 。
render应该定义成这样,并且注意顺序:REST_FRAMEWORK = { ... 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.JSONPRenderer', 'rest_framework.renderers.BrowsableAPIRenderer', 'rest_framework.renderers.XMLRenderer', ), ... }
关于rest framework settings,更多信息可参考
http://www.django-rest-framework.org/api-guide/settings/