06-REST Framework - API
# 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的更多相关文章
- Microsoft Win32 to Microsoft .NET Framework API Map
Microsoft Win32 to Microsoft .NET Framework API Map .NET Development (General) Technical Articles ...
- 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 ...
- Django REST Framework API Guide 01
之前按照REST Framework官方文档提供的简介写了一系列的简单的介绍博客,说白了就是翻译了一下简介,而且翻译的很烂.到真正的生产时,就会发现很鸡肋,连熟悉大概知道rest framework都 ...
- Django Rest Framework API指南
Django Rest Framework API指南 Django Rest Framework 所有API如下: Request 请求 Response 响应 View 视图 Generic vi ...
- Django REST Framework API Guide 06
本节大纲 1.Validators 2.Authentication Validators 在REST框架中处理验证的大多数时间,您将仅仅依赖于缺省字段验证,或在序列化器或字段类上编写显式验证方法.但 ...
- Use Generic Replacements of 1.X Framework API Classes 用泛型替换Framework 1.X版本的API类
第一章,第一节 用泛型替换Framework 1.X版本的API类. 说起来,我是没接触过Framework 1.X版本的程序,12年毕的业(算算时间也一年多了,依旧一事无成,汗),毕业之后到公司实习 ...
- Django REST Framework API Guide 04
本节大纲 1.serializers 1.Serializers Serializers允许复杂的数据,像queryset和模型实例转换成源生的Python数据类型.从而可以更简单的被渲染成JSON, ...
- Django REST Framework API Guide 03
本节大纲 1.Routers 2.Parsers 3.Renderers Routers Usage from rest_framework import routers router = route ...
- Django REST Framework API Guide 02
本节大纲 1.Generic Views 2.ViewSets 1.Generic Views CBV的主要的一个优点就是极大的允许了对于代码的从用.自然,rest framework取其优势,提供 ...
随机推荐
- Tire树简介
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种. 典型应用:用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计. 它的优点是:利用字符串的公共 ...
- linux socket设置阻塞与非阻塞
非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明: 基本概念: 阻塞IO:: socket 的阻塞模式 ...
- 程序员心髓:移动应用API设计10大技巧
移动App与基于Web/云服务发生对话是很常见的事情,最简单的可能仅仅只是检索数据,但也可能包含发送数据.用户授权和管理.而这也就验证了为移动应用建立API的重要性,为此,我们特总结了10大移动API ...
- intellij idea中去除@Autowired注入对象的红色波浪线提示
idea中通过@Autowired注入的对象一直有下划线提示. 解决:改变@Autowired的检查级别即可. 快捷键:Ctrl+Alt+s,进入idea设置界面,输入inspections检索
- SVN重命名后,不允许提交
在vs中对文件名重命名后,导致不能提交 解决: 在源码根目录下提交源码,提交完毕后,再使用如下菜单对需要命名的单个文件进行重命名,重命名完毕后,在源码根目录下提交源码即可
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)K Kingdom Roadmap
K: 给你n个点以及n-1的条边, 问你最少要加多少条边,使得每两个点割去一条联通的边,还可以使的这两个点连通. 有个一个结论,最少添加的边数为(叶子节点数+1)/ 2. 我们可以只考虑叶子节点数应该 ...
- ppapi,npapi
PPAPI也就是Pepper Plugin API,是在原有网景NPAPI(Netscape Plugin API)基础上发展而来的.NPAPI是当今最流行的插件架构,几乎所有浏览器都支持,不过存在很 ...
- js实现两个从input获取到的数字相加引发的问题
从input中获取到的数据是文本类型的,如果不转化类型直接相加会变成字符串的相加. 使用Number()函数可以解决这个问题,如下 var c = Number(a) + Number(b)
- mysql在linux下连接超慢的问题及解决办法
今天一来公司发现mysql连接很慢很慢!!!!不知为啥!! 从其它地方连接MySQL数据库的时候,有时候很慢.慢的原因有可能是MySQL进行反向DNS解析造成的,这里简单介绍下原理,需要的朋友可以参考 ...
- Sass 的 & 符号(ampersands)
重复声明 有时您需要击败第三方 CSS 库的声明来获取样式的所有权: .parent.parent {} 这种方式比使用和 ID,内联样式或!important的压倒性弱,并且它可能比使用任意父元素限 ...