当前位置:首页 > Windows程序 > 正文

REST、DRF(View源码解读、APIView源码解读)

2024-03-31 Windows程序

一.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

Jm-杰米博客Jamie
草根站长的技术交流乐园!IT不会不要紧快来好好学习吧!
  • 20786文章总数
  • 7494607访问次数
  • 建站天数
  • 友情链接