一 Django REST framework介绍(必须理解CBV和FBV)
REST 的设计原则
https://www.cnblogs.com/big-handsome-guy/p/8490348.html restful api 的基本概念 介绍
统一接口 Uniform interface 无状态 Stateless 可缓存 Cacheable 服务端 客户端分离 Client-Server 分层系统 Layered System 按需编码 Code on comm
Django REST framework(DRF)
官网:http://www.django-rest-framework.org/
Django REST框架是一个功能强大且灵活的工具包,用于构建Web API。
Django Rest Framework(DRF)为我们的Django Talk项目创建RESTFul API ,这是一个用于快速构建基于Django模型的RESTful API的应用程序。
一个能快速为我们提供API接口,方便我们编程的框架。API是后端编程人员写的,为了让前端拿数据的一个接口,通常就是以url的形式存在
每个项目总有第一个人做基础构架,这个时候就不是仅仅实现一个API就OK了,需要考虑更多的事情,包括
统一的异常处理
API权限
统一的参数校验
缓存如何可以做的更简单统一
认证
统一的查询过滤
代码分层
RestFramework能很好的帮我们做这些事情。
API设计规范
https://www.cnblogs.com/liwenzhou/p/9338256.html RESTful API介绍
首先我们要知道,API并不是必须的,如果整个项目只有你一个人或者很少的人完成,完全可以直接用Django的模板引擎渲染发送到前端后直接操作。API的使用主要是为了解决多人开发,特别是前后端分离的情况。因为前端人员在制作页面时必然会需要向后端要数据,但是假如前后端是分离的,就不能用Django的render了,大部分情况前端会用ajax发送请求,后端人员则发送JSON字符串给前端,前端再反序列化后进行使用。这个时候其实我们设计一套API出来,就能使我们的任务轻松很多。所以,RestFramework就应运而生了。 API与用户的通信协议,本质上是HTTPs协议。 使用RestFramework设计API有一套规范,即RESTful,为了不平添与你合作开发的人的烦恼,我们还是要遵循这些规范。那么到底有哪些规范呢? 1.域名 :域名上要显示你使用了API,我们有两种方式 https://api.example.com 方式一:将API部署在专用域名上(是官网的推荐方式,但这么做会存在跨域问题) https://example.org/api/ 方式二: 写在路径上,API很简单
2.版本 :我们的项目在开发过程中会进行功能的添加及优化,这个时候我们通常会为每一个版本设定一个版本号,版本号的显示也有两种方式 https://api.example.com/v1/ 方式一: 写在路径上,API很简单 https://v1.example.com 方式二:将版本号部署在专用域名上(同样会存在跨域问题, 跨域时会引发发送多次请求)
3.路径 :视网络上任何东西都是资源,所以路径均使用名词表示(可复数) https://api.example.com/v1/zoos https://api.example.com/v1/animals
4.请求方式 GET :从服务器取出资源(一项或多项) POST :在服务器新建一个资源 PUT :在服务器更新资源(客户端提供改变后的完整资源——全部修改) PATCH :在服务器更新资源(客户端提供改变的属性——部分修改) DELETE :从服务器删除资源
5.过滤 :通过在URL上传参的方式,有GET请求获取相应的数据 https://api.example.com/v1/zoos?limit=10:指定返回数据的数量 https://api.example.com/v1/zoos?offset=10:指定返回数据的开始位置 https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页以及每页的数据数量 https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序 https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件
6.状态码 :我们可以通过状态码来判断请求的状态,以处理相应的请求。在状态码是4开头时,应该捕捉相应错误并返回错误信息 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务) 204 NO CONTENT - [DELETE]:用户删除数据成功。 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。 更多看这里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 常用状态码 {error: "Invalid API key"}#错误信息因用error作为key
7.返回结果 :针对不同操作,服务器向用户返回的结果应该符合以下规范。 GET/collection:返回资源对象的列表 GET/collection/resource:返回单个资源对象 POST/collection:返回新生成的资源对象 PUT/collection/resource:返回完整的资源对象 PATCH/collection/resource:返回完整的资源对象 DELETE/collection/resource:返回一个空文档
8.Hypermedia API :RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。 {"link": { "rel": "collection https://www.example.com/zoos", "href": "https://api.example.com/zoos", "title": "List of zoos", "type": "application/vnd.yourformat+json" }}
https://www.cnblogs.com/yuanchenqi/articles/8715364.html Python CBV和FBV介绍
https://www.cnblogs.com/lovershowtime/p/11353499.html
https://www.cnblogs.com/smail-bao/p/9646736.html Python CBV和FBV实例
https://www.cnblogs.com/tfzz/p/11544702.html Python django视图层 cbv使用和源码解析
https://www.cnblogs.com/yuanchenqi/category/1192114.html rest-framework框架
https://www.cnblogs.com/pythonywy/p/11568936.html rest-framework框架