# 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. django model序列化作用举例

    一直对使用DRF的了解停留在一知半解的状态,今天在实际操作中,感受到了DRF带来的方便 Django工程,其中两个model定义如下: AutomationHeadRaw: class Automat ...

  2. 根据linux自带的JDK,配置JAVA_HOME目录

    在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用centos6.5是64位的, 发现本机有java ,就找了一下其位置 找到了jdk-1.7.0_75 which java ...

  3. Oracle-SQL程序优化4

    从事一年DBA工作,经验尚浅,但是遇到问题总还是能够解决,今天就谈下我遇到的一个比较奇葩的问题. 运维人员告知我下午过后ETL一直卡住没有继续,那时我以为又是什么兼容性问题引起的,就重跑一下ETL,谁 ...

  4. sqli-labs(23)

    基于get的过滤了的注入 0X1测试闭合 /?id=' http://127.0.0.1/sql1/Less-23/?id=1%27%27 0X02 然后就是组合拳的操作了 未报错 那么应该是’闭合 ...

  5. [IOI2008/BZOJ1791 岛屿](处理基环树的小技巧&基于bfs树形DP)

    IOI2008/BZOJ1791 岛屿 题目大意是在一个基环树森林里求每一棵基环树的直径①的和. 其实就是树的直径的基环树升级版.我们先把环找出来,然后从环上的每一个节点x出发,并且不经过环上其他节点 ...

  6. layui 获取select option value 获取text

    $.trim($("#processState").val()): //获取val $("#processState option:selected").tex ...

  7. HDU6534 Chika and Friendly Pairs(莫队,树状数组)

    HDU6534 Chika and Friendly Pairs 莫队,树状数组的简单题 #include<bits/stdc++.h> using namespace std; cons ...

  8. C/C++中的 void 和 void*

    转自:https://blog.csdn.net/tonglin12138/article/details/86516789 写在前面:开门见山,大家看下面这个例子: unsigned char er ...

  9. ef和ashx的简单测试

    在这里.小弟我默默的计算了一下用一般处理程序和MVC配合EF,到底哪个快,事实问题是我感觉都差不多,因为用的是EF,所以要提高访问速率,我觉得还是要从数据访问做起: 一般处理程序代码: private ...

  10. 转 HTTP请求报文格式 GET和POST

    https://blog.csdn.net/h517604180/article/details/79802914 最近在做安卓客户端图片上传插件功能,供后台调用.其中涉及到了拼接HTTP请求报文,所 ...