在使用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/
问题:在使用rest framework开发过程中,经常使用raise APIException来返回处理结果。 但是发现,命令行下查看,每次返回的总是一大串的html标签(实际上是rest framework api的页面)。 而我们期望返回的是我们填写的提示信息,例如,”时间格式错误”,“参数太长”,“成功”等等。解决办法:查看DEBUG首先怀疑的是settings中的DEBUG问题,经过
REST
是一种架构样式,用于通过HTTP设计网络应用程序和
API
。 它代表RE表象小号大老贸易交接。 符合
REST
体系结构样式的Web服务或
REST
ful Web服务可在Internet上的计算机系统之间提供互操作性。
REST
约束
作为
REST
的创造者,Roy Fielding在他的描述了它,它被认为是一整套需求,由要实现该系统的环境的约束所决定。 这样的约束是:
客户端
-服务器架构
统一接口(资源 ,)
按需代码(可选)
带有元数据的索引视图
列出所有帖子
/帖子/ <id> /
按ID显示个人帖子
一、什么是
REST
面向资源是
REST
最明显的特征,资源是一种看待服务器的方式,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且
客户端
应用开发者能够理解。
与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个URI来标识。URI既是资源的名称,也是资源在Web上的地址。对某个资源感兴趣的
客户端
应用,可以通过资源的URI与其进行交互。对于同一个资源的一组不同的操作。资源是服务器
本门课程重实战,将基础知识拆解到项目里,让你在项目情境里学知识。 这样的学习方式能让你保持兴趣、充满动力,
时
刻知道学的东西能用在哪、能怎么用。 平
时
不明白的知识点,放在项目里去理解就恍然大悟了。 一、融汇贯通 本视频采用了前后端分离的开发模式,前端
使用
Vue.js+Element UI实现了Web页面的呈现,后端
使用
Python 的
Django
框架实现了数据访问的接口,前端通过Axios访问后端接口获得数据。在学习完本章节后,真正理解前后端的各自承担的工作。 二、贴近实战 本系列课程为练手项目实战:学生管理系统v4.0的开发,项目包含了如下几个内容:项目的总体介绍、基本功能的演示、Vuejs的初始化、Element UI的
使用
、在
Django
中实现针对数据的增删改查的接口、在Vuejs中实现前端增删改查的调用、实现文件的上传、实现表格的分页、实现导出数据到Excel、实现通过Excel导入数据、实现针对表格的批量化操作等等,所有的功能都通过演示完成、贴近了实战 三、课程亮点 在本案例中,最大的亮点在于前后端做了分离,真正理解前后端的各自承担的工作。前端如何和后端交互 适合人群: 1、有Python语言基础、web前端基础,想要深入学习Python Web框架的朋友; 2、有
Django
基础,但是想学习企业级项目实战的朋友; 3、有MySQL数据库基础的朋友
<OriginalInfo>
<Key>test.jpeg</Key>
<Location>qr-code-1305143506.cos.ap-shanghai.myqcloud.com/test.jpeg</Location>
<ETag>"930b8ceb82c9e7ed3dc61bdc0f8577065f7484a7"<.
一. 异常在
使用
Django
Rest
Framework
的
时
候,如果发生异常的话,往往如下面所示:{"detail": "Not allowed."}但是后台往往想要的是常见的模式:{
"desc":"Not allowed.",
"code":400,
"data":null
}官网文档 还是很清楚的,我们需要自定义 异常处理,然后配置就可以了,比如:1. 实现f
有关该项目的完整文档,请参见 。
直接从官方
Django
REST
Framework
实现中提取的XML支持作为第三方包。 它仅需要软件包是因为它可以防止发现的某些安全问题。
注意:提供的XML输出是临
时
格式,未正式描述。 如果您有特定的XML要求,则需要编写自己的XML解析器/渲染器以完全控制表示形式。
Python 3.5+
Django
2.2以上
Django
REST
框架3.11+
使用
pip安装...
$ pip install
django
rest
framework
-xml
pip install
django
==2.1.5
pip install
django
rest
framework
#
rest
api
pip install core
api
pygments markdown # 自动化接口文档
API
示例
#settings.conf
REST
_
FRAMEWORK
= {
'DEFAULT_PAGINATION_CLASS': 'common.utils.custom_pagination.LargeResultsSetPagination',
'PAGE_SIZE': 20, #...
Django
REST
framework
是一个用于构建 Web
API
的强大框架。它建立在
Django
框架之上,提供了许多用于创建和管理
REST
ful 风格
API
的工具。
1. 安装
Django
REST
framework
:
使用
pip 安装
django
rest
framework
库。
2. 在settings.py文件中添加
rest
_
framework
到INSTALLED_APPS:
INSTALLED_APPS = [
'
rest
_
framework
',
3. 创建序列化器(Serializers):序列化器将模型转换为JSON,XML或其他格式。
4. 创建视图(Views):视图是处理请求和响应的类或函数。
5. 创建URL模式(URL Patterns):
使用
路由器将URL映射到视图。
6. 测试
API
:
使用
测试
客户端
测试
API
。
以上是
Django
REST
framework
的基本
使用
方法。如果需要更详细的教程,可以在官网上查看:https://www.
django
-
rest
-
framework
.org/tutorial/1-serialization/