CHENGDU3-Restful API 接口规范、django-rest-framework框架
Restful API 接口规范、django-rest-framework框架
问题:什么是API?
答:API是接口,提供url.
接口有两个用途:
为别人提供服务,前后端分离。
为什么使用前后端分离?
答:主要为了数据的解耦,提高开发效率。
如果更新了数据,web页面需要更改,而且网站的前端页面变动很大,后端也可能更改,会非常麻烦。
使用前端框架VUE.js,能快速搭建前端项目,不需要依赖后端。
后端只需做序列化,返回json数据即可,并不涉及更多操作。
Restful API规范?
答:之前我们是没有用rest api规范的,都是通过django的url自己来做的,后来我们选择用了rest api。
(1):API与用户的通信协议,使用的是http协议
(2):域名尽量部署在专有域名之下,若API很简单,不会进一步扩展,可以考虑放在主域名下。
(3):应将api的版本号放入url,还可以将版本号放入Http请求头信息中,但不如放在url中方便。
也可以放在子域名上(放在子域名上会存在跨域的问题,)
(4):在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,
而且所用的名词往往与数据库的表格名对应。一般来说,
数据库中的表都是同种记录的"集合",所以API中的名词也应该使用复数。
(5):如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
(6)根据请求方式的不同,来区分不同的行为。post----get----put----patch----delete。
(7):服务器向用户返回的状态码和提示信息。
(8):返回json数据。
常用的请求方式有那些?
答:Get :获取数据,Post:创建数据,Patch:部分修改
Put :全部修改,DELETE:删除数据,
Options:如果有跨域,会先发一个option请求,先做预检,完了在执行自己发的请求
常见的状态码有那些?
答:200:响应成功,302:重定向,403:Forbidden
404:找不到页面,500:服务端代码有误
谈谈你对restful framework的认识?
答:我们一开始是没有用restful framework,
用django写一些装饰器或中间件也能实现。
但是它为我们事先提供了一部分接口,
常用的有:获取版本,认证,权限,分流 ,
我们只需要按照restful的规范,只需要写几个类就好了,或者在配置文件里面配置一下就可以使用。
尤其是在用户访问频率限制的时候,restful里面都已经封装好了,我们直接调用它的方法就行了。
我们写的时候是基于CBV模式写的,这个和django中的CBV是一样的,
请求先进来会走dispatch方法,根据请求方法不同反射执行不同的方法。
我们写的类是继承APIView的View,去执行它的dispatch先找自己的,自己没有就找父类的。
restful framework执行流程?
restful framework请求进来到达路由.as_view(),在as_view里面return了一个view函数,请求进来先执行一个view函数。
as_views调用了dispath方法根据请求方式的不同,触发不同的方法。
initialize_request这个方法接收客户端的request请求,再重新封装成新的request。请求一些相关的东西放到request中
然后进行初始化,获取版本,认证调用request.user方法,检查权限,检查限制访问。
执行对应视图函数。
对返回结果再次进行加工。重要的功能在APIviews的dispath中实现。
Django Rest Framework 的的请求生命周期
TTP请求 —> wsgi —> 中间件 —> 路由分发 —> 执行对应类的dispatch方法 —> 视图函数 —>返回
采用CBV的请求方式。 经过“中间件”时,依次执行中间件内部的 process_request--->process_view--->process_template_response
---->process_exception---->process_response
restful framework中包括那些?
答:有版本,认证,权限,访问频率的限制,路由系统,视图,渲染器,序列化,分页,解析器。
认证?
答:执行认证功能,确认进行后续操作的用户是被允许的,perform_authentication方法返回经过认证的用户对象,
传入的request是重新封装过的。
版本?
功能的更新迭代。
可以放在url,也可以放在请求头,但不是很方便,也可以放在子域名上,但存在跨域的问题。
可以用三种方法实现:get传参方式,基于url正则传参
如果url中有版本信息,就获取发送到服务端的版本,返回一个元组.
权限?
答:如果用户通过认证,检查用户是否有权限访问url中所传的路径,如用用户访问的是没有没有权限的路径,则会抛出异常。
访问频率的限制?
答:作用是检查用户是否被限制了访问主机的次数。
解析器
答:对请求数据进行解析,对请求体进行解析。
如何进行序列化的?
答:有两种方法实现
一:从数据去取出数据,return response
二:从数据库求出数据,赋值给instance,设置是否是单对象,再进行赋值,然后return response(.data)返回。
ser = UsersSerializer(instance=user_list,many=True)
return Response(ser.data)
序列化?
答:解决QuerySet序列化问题。
序列化:
基本序列化:单对象,多对象。instance=user_list,many=True
跨表序列化:
复杂序列化:
基于Model实现序列化:
生成url:
全部生成url:
请求数据验证:
CHENGDU3-Restful API 接口规范、django-rest-framework框架的更多相关文章
- day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能
目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...
- RESTful API 和 Django REST framework
100天 cmdb最后一天 #RESTful API - 定义规范 如get就是请求题 - 面向资源编程 把网络任何东西都当作资源 #给一个url,根据方法的不同对资源做不同的操作 #返回结果和状态码 ...
- Django REST framework框架介绍和基本使用
Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...
- RESTful api 与 Django的 restfulframework
RESTful api 与 Django的 restfulframework 1 restful api 的基本概念 一类的资源使用一个url,不同的操作通过 请求方式处理 api -- >&g ...
- Django Rest framework 框架之认证使用和源码执行流程
用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...
- web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝
web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...
- Django Rest Framework框架 ---- url控制器
Django Rest Framework框架 ---- url控制器
- web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍
web前端Vue+Django rest framework 框架 生鲜电商项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...
- Django Rest framework 框架
一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...
- Django Rest Framework框架源码流程
在详细说django-rest-framework源码流程之前,先要知道什么是RESTFUL.REST API . RESTFUL是所有Web应用都应该遵守的架构设计指导原则. REST是Repres ...
随机推荐
- 判断GPS是否开启&转到设置GPS界面
/** * 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的 * @param context * @return true 表示开启 */ public static final boo ...
- 20165234 《Java程序设计》第一周学习总结
第一周学习总结 教材学习内容总结 java的特点 语法简单,面向对象,稳定,与平台无关,多线程,动态. 平台是由操作系统和处理器(CPU)所构成,每个平台都会形成自己独特的机器指令,相同的CPU和不同 ...
- dubbo源码分析13——服务本地暴露 exportLocal(url)
dubbo服务的本地暴露,显然是针对当服务消费者和服务提供者都在同一个jvm的进程内这种场景 .通常是发生在服务之间的调用的情况下.一种情况就是A服务调用B服务的情况,如果A服务和B服务都是在一个线程 ...
- c++不定参数函数
不定参数当年做为C/C++语言一个特长被很多人推崇,但是实际上这种技术并没有应用很多.除了格式化输出之外,我实在没看到多少应用.主要原因是这种技术比较麻烦,副作用也比较多,而一般情况下重载函数也足以替 ...
- 1、git基础介绍及远程/本地仓库、分支
1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...
- 使用Fiddler进行手机端抓包
1.手机和电脑在同一局域网 2.在电脑上查看ip地址 3.如果是需要抓取https,则需要在浏览器中输入http://xxx.xxx.x.xxx:8888(第二部查到的ip地址 + Fiddler 的 ...
- Linq与Lambda常用查询语法
1.查询全部 2.按条件查询全部 3.去除重复 4.连接查询 between and 5.排序 6.分组
- Solidworks设计电路外形导入AltiumDesigner
将实际设计好的三维电路图的底板(单个零件模式下)轮廓另存为dwf或者dwg 这时候会出现一个选项框,需要进行一些设置 单位选择mm,这个按照自己的需求选择单位 单位映射选择为1mm,也就是1:1的比例 ...
- rsyslog的安装、使用、详解
操作系统:CentOS release 6.7 download yum repo file:rsyslogall.repo [rsyslog-v8-stable] name=Adiscon Rsys ...
- 深入Golang调度器之GMP模型
前言 随着服务器硬件迭代升级,配置也越来越高.为充分利用服务器资源,并发编程也变的越来越重要.在开始之前,需要了解一下并发(concurrency)和并行(parallesim)的区别. 并发: 逻 ...