# Django REST Framework
# 1. REST
- 前后端分离
- API-ApplicationProgrammingInterface
  - 为了应付千变万化的前端需求
- REST:RepresataionsStateTrans
  - 20000 Fieding博士提出
  - RESTful:遵守REST规范的技术设计的软件可以称为RESTful
- REST规范
  - URL代表一个资源,一个资源应该是一个名词
  - 动作有HTTP的methode方法提供
  - URL应该包含版本信息,版本信息也可以放在HTTP协议中
  - 过滤信息,使用URL的参数代表过滤
  - 返回值: 每一个返回代码都有具体特定含义
  - 返回格式:推荐固定具体格式
- DjangoRestFramework(DRF)
  - https://q1mi.github.io/Django-REST-framework-documentation/
  - 安装:pip install djangorestframework
  - 版本问题: version3.7是基于1.xx版本django,之后是2.xx版本django
  - django_filter依赖djangorestframework 3.7
- DRF的主要任务

  - django-admin startproject TlxyDRF
  - python manage.py startapp case01
  - 配置settings
  - 配置urls
  - 创建三个模型:Student,Teacher, ClassRoom
  - 创建序列化器
  - 创建视图聚合

# 序列化
- 序列化: 把系统运行中的一些实例等转换成一种可直接表示出来的格式,用来保存,传输等
- 反序列化: 序列化的反操作

# 序列化/反序列化-DRF

# 实验步骤
- 创建project DRF2
- 创建app MySer
- settings
# serializer的类型的参数
- read_only: 仅用于序列化输出
- write_only: 反序列化输入
- required:反序列化时必须输入,默认是True
- allow_null: 允许传入None
- validators: 使用验证器
# 创建serializer对象/使用
- 构造方法

  Serializer(instance=None, data=empty, **kwarg)

- 反序列化
  - 验证
    - is_valid:
      - 验证数据是否合法,返回boolean
      - 在使用从外部传入的数据之前,必须使用此函数进行验证
      - 如果验证失败,返回数据错误异常
  - validated_data:
      - 经过验证后的数据,存入此结构
- 视图
  - DRF的试图从处理任务,处理流程等跟Django基本一致
  - 此视图基本是django视图的扩展
  - Request
    - 把请求解析成一个request实例
    - 属于DRF的,跟django的HttpRequest不太一样
    - 在得到Request之前有一个Parse对传入的数据请求进行解析
    - data属性
      - 请求数据体,类似于Django的request.POST, request.FILES
      - 在DRF中主要指的是Json
    - query_params
      - 所有传入的关键字

      api.tulingxueyuan.com/student/?name='liu'
      # 使用案例
      name = self.request.query_params.get('name', None)

  - user
    - 登录后的用户信息都在user中
    - 如果没有登录,则是anoymous
    - 可以用来判断用户是否登录成功
- Response
  - rest_framework.response.Response
  - 用Renderer渲染器对返回内容进行渲染

    REST_FRAMEWORK = {
      'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
      'rest_framework.renderers.JSONRenderer', # json渲染器
      'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
      )
    }

  - 返回的构造方式
    - return Response(data, status=None, template_name=None, headers=None, content_type=None)
    - data: 返回的数据
    - status: 返回的状态码
      - 1xx: 信息告知
      - 2xx: 成功
      - 3xx:重定向
      - 4xx: 请求错误
      - 5xx: 服务器错误
- 视图类
- APIView
  - rest_framework.views.APIView
  - 是django中View的子类
  - 跟View有不同的地方
    - 传入传出数据用的是drf的请求和反馈类
    - 会引发并处理APIException
    - 在dispatch之前,会进行身份验证,权限检查,流量控制
  - 支持的属性有
    - authentication_classes: 列表或者元祖,身份验证类
    - permisson_classes: 进行权限验证
    - throttle_classes:流量控制类
  - 对API的访问提供了一些方便
    - HTTP-Method + 名词
    - 默认对HttpMethod常用方法提供了支持

- API调试工具
  - chrome - postman
  - firefox - RESTClient

  - GenericAPIView
    - APIView的子类
    - 支持的属性
      - queryset:查询结果集
      - serializer_class: 视图使用的序列化器
      - panination_class: 分页控制器
      - filter_backends: 过滤器后端
      - lookup_field:查询条件字段,默认为pk
  - get_queryset: 返回查询结果集集合,经常需要重写
  - get_serializer_class:得到序列化器类
  - get_serializer: 得到序列化器
- ListModelMixin
  - list(reqeust, *args, **kwargs)
- CreateModelMixin
  - create(requst, *args, **kwargs)
- RetrieveModelMixin
  - retrieve(...............)
- UpdateModelMixin
  - update(..........)
- DestroyModelMixin
  - destroy(.......)

- ViewSet
  - 把一系列操作打包放入一个类中
  - list:GET
  - retrieve:GET + id
  - destroy:DELETE
  - update:UPDATE
  - create:POST

06-REST Framework - API的更多相关文章

  1. Microsoft Win32 to Microsoft .NET Framework API Map

    Microsoft Win32 to Microsoft .NET Framework API Map .NET Development (General) Technical Articles   ...

  2. java.lang.NoSuchMethodError: org.apache.curator.framework.api.CreateBuilder.creatingParentsIfNeeded()Lorg/apache/curator/framework/api/ProtectACLCreateModeStatPathAndBytesable;

    1 错误信息 java.lang.NoSuchMethodError: org.apache.curator.framework.api.CreateBuilder.creatingParentsIf ...

  3. Django REST Framework API Guide 01

    之前按照REST Framework官方文档提供的简介写了一系列的简单的介绍博客,说白了就是翻译了一下简介,而且翻译的很烂.到真正的生产时,就会发现很鸡肋,连熟悉大概知道rest framework都 ...

  4. Django Rest Framework API指南

    Django Rest Framework API指南 Django Rest Framework 所有API如下: Request 请求 Response 响应 View 视图 Generic vi ...

  5. Django REST Framework API Guide 06

    本节大纲 1.Validators 2.Authentication Validators 在REST框架中处理验证的大多数时间,您将仅仅依赖于缺省字段验证,或在序列化器或字段类上编写显式验证方法.但 ...

  6. Use Generic Replacements of 1.X Framework API Classes 用泛型替换Framework 1.X版本的API类

    第一章,第一节 用泛型替换Framework 1.X版本的API类. 说起来,我是没接触过Framework 1.X版本的程序,12年毕的业(算算时间也一年多了,依旧一事无成,汗),毕业之后到公司实习 ...

  7. Django REST Framework API Guide 04

    本节大纲 1.serializers 1.Serializers Serializers允许复杂的数据,像queryset和模型实例转换成源生的Python数据类型.从而可以更简单的被渲染成JSON, ...

  8. Django REST Framework API Guide 03

    本节大纲 1.Routers 2.Parsers 3.Renderers Routers Usage from rest_framework import routers router = route ...

  9. Django REST Framework API Guide 02

    本节大纲 1.Generic Views 2.ViewSets  1.Generic Views CBV的主要的一个优点就是极大的允许了对于代码的从用.自然,rest framework取其优势,提供 ...

随机推荐

  1. 记ubuntu sudo无法使用,su密码不对的解决办法

    前言 因为我有强制关机的习惯, 然后就杯具了.. ubuntu版本是 16.04 sudo没法使用, su密码不对, 顿时我就慌了 解决方案 1.1.开机点击ESC,进去GUN GRUB界面 1.2. ...

  2. 网页结构树DOM

    引入 window对象 所有浏览器都支持 window 对象.它表示浏览器窗口. *如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为 ...

  3. TCP,UDP,HTTP

    使用图表非常系统介绍了TCP和UDP的区别 https://blog.fundebug.com/2019/03/22/differences-of-tcp-and-udp/ 举了一个TCP/IP通讯的 ...

  4. 第四周学习总结&实验报告

    学习总结; String类: 1.方法只会开辟一块堆内存空间,且会自动保存在对象池中以供下次重复使用: 2方法会开辟两块堆内存空间,其中一块会成为垃圾空间. 1."=="比的是地址 ...

  5. 微服务SpringCloud系列

    https://my.oschina.net/hmilyylimh?tab=newest&catalogId=5703366

  6. C#的keyValue

  7. 一、基础篇--1.1Java基础-抽象类和接口的区别

    抽象类和接口的区别 抽象类和接口在设计层面的区别主要体现在:接口是对动作的抽象,抽象类是对根源.类的抽象.抽象类表示的是,这个对象是什么,接口表示的是,这个对象可以做什么. 比如,男人.女人是人,人是 ...

  8. 数据结构和算法(Java版)快速学习(栈与队列)

    栈是仅允许在表尾进行插入和删除操作的线性表.我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom).栈是一种后进先出(Last In First Out)的线性表,简称(LIFO ...

  9. JS - 语音

    语音识别 浏览器支持的还不是很好 语音播放 speechSynthesis.speak(new SpeechSynthesisUtterance('只要是活着的东西,神也杀给你看')); 参见 Web ...

  10. [VBA]斐波那契数列

    Sub 斐波那契()Dim arrFor i = 3 To 100Cells(1, 1) = 0Cells(2, 1) = 1Cells(i, 1) = Cells(i - 1, 1) + Cells ...