REST、DRF(View源码解读、APIView源码解读)
一.REST 1.什么是编程?
数据结构和算法的结合
2.什么是REST?首先我们回顾下我们之前的图书管理系统,我们设计了这样的URL,如下:
127.0.0.1:9001/books/ 127.0.0.1:9001/get_all_books/ 访问所有的数据 127.0.0.1:9001/books/{id}/ 127.0.0.1:9001/books/{id}?method=get 访问单条数据 127.0.0.1:9001/books/add/ 127.0.0.1:9001/books/?type=create 创建数据 127.0.0.1:9001/books/delete/ 127.0.0.1:9001/books/update/
分析:以上定义的url虽然也可以实现功能,但是因个人命名习惯的不同,同一个功能会产生五花八门的url,而且响应回去的数据(包括错误提示等)格式也没有统一的规范,这就造成了前后端交互上的困难。
因此,就产生了REST,,REST下的url唯一代表资源,http请求方式来区分用户行为,下面就是符合REST下的url设计规范的示例:
url的设计规范: GET: 127.0.0.1:9001/books/ # 获取所有数据 GET: 127.0.0.1:9001/books/{id} # 获取单条数据 POST: 127.0.0.1:9001/books/ # 增加数据 DELETE: 127.0.0.1:9001/books/{id} # 删除数据 PUT: 127.0.0.1:9001/books/{id} # 修改数据 数据响应规范: GET: 127.0.0.1:9001/books/ # 返回[{}, {}, {}] GET: 127.0.0.1:9001/books/{id} # 返回单条数据{} POST: 127.0.0.1:9001/books/ # 返回添加成功的数据{} DELETE: 127.0.0.1:9001/books/{id} # 返回空"" PUT: 127.0.0.1:9001/books/{id} # 返回{} ,更新后完整的一条记录,注意并非一个字段 错误处理: { "error": "error_message" }
REST是只用软甲架构设计风格,不是标准,也不是技术实现,只是提供了一组设计原则和约束条件,是目前最流行的API 设计规范,用于web数据接口的设计。2000年,由Roy Fielding在他的博士论文中提出,Roy Fielding是HTTP规范的主要编写者之一。
RESTful参考链接:
RESTful API 最佳实践 - 阮一峰
我所认为的RESTful API最佳实践
那么,我们接下来要学的Django Rest Framework与REST有什么关系呢?
其实,DRF(Django REST Framework)是一套基于django开发的,帮助我们更好的设计符合REST规范的web应用的一个Django App,所以,本质上,它是要给Django App。
二、知识准备学习新知识之前,先回顾以下几个知识点:
1、CBV(class based view)django.views import View class LoginView(View): def get(self, request): pass def post(self, request): pass 2、 类方法classmethod & classonlymethod
class Person(object): def __init__(self, name, age): self.name = name self.age = age # 注意:Person类加载时,会执行装饰器函数classmethod(sleepping),并将结果赋给slepping @classmethod # 相当于 sleepping = classmethod(sleepping) def sleepping(cls): print("Jihong is sleepping") @classonlymethod def guangjie(cls): print("Jihong is shopping") Person.sleepping() # 类直接调用类方法 Person.guangjie() # 类直接调用方法 jihong = Person("jihong", 20) jihong.sleepping() # 对象可以调用类方法 jihong.guangjie() # 报错,对象不能调用由@classonlymethod装饰的方法
总结:
@classmethod装饰(python加的装饰器)的方法可以由对象和类调用;
@classonlymethod装饰(django加的装饰器)只能由类直接调用;
3、反射getattr, hasattr, setattr
4、self定位明确self指向谁 - 始终指向调用者
5、http请求协议协议就是沟通双方约定俗称的规范,即解析数据的规则。
6、form表单的enctype属性中有三种请求协议如果通过form表单提交用户数据,可以使用form表单的enctype属性来定义数据编码协议,该属性有三个值,代表三种数据编码协议:
- application/x-www-form-urlencoded:使用&符号连接多个键值对,键值对用等号拼接,默认;
- multipart/form-data:上传文件、图片时使用该方式;
- text/plain:空格转换为“+”号;
7、JavaScript中 object,例如: { name: "pizza"} <==> json 的相互转换方式JSON.stringify(data) =相当于=> python json.dumps()
JSON.parse(data) =相当于=> python json.loads()
三、Django REST Framework(DRF)为什么使用DRF?
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/47847.html