接口:接口的概念、数据接口文档、接口规范(restfull)、Postman接口测试工具 drf请求生命周期 - CBV drf的基础组件:请求、响应、渲染、解析、异常 drf的序列化(核心):序列化、模型序列化、群操做序列化 drf的视图家族:视图类(经常使用)、视图工具类、工具视图类(经常使用)、视图集 drf的三大认证(核心):认证、权限、频率 drf的过滤:筛选、搜索、排序分页、区间、自定义
drf是Django的插件,因此要提早安装Django前端
安装指令:pip3 install djangorestframeworkvue
使用drf时,要在settings中注册python
什么是接口:规定了提交请求参数的请求方法、访问其能够获取响应的反馈数据的url连接ios
四部分:url连接+请求方法+请求参数+响应数据结果npm
接口文档:将接口的四部分翻译成文档形式——word 、md、Yapidjango
接口测试工具:Postmanaxios
接口测试规范:后端
连接:--https://api.baidu.com/v2/user/?ordering=-uid 请求方式:增post、删delete、整改put、局改patch、查get 响应:网络状态码、数据状态码、数据状态信息、数据体(子资源)
十大接口:单群查|单群增|单群总体改|单群局部改|单群删api
CBV源码:as_view()=>view()=>dispatch()=>视图类的视图方法get|post...数组
debug窗口使用
接口都是操做先后台数据的,因此须要保证数据的安全性
采用https协议
接口用来操做数据,与网址(操做页面)有区别,因此用特定的关键字表示接口
api关键字
--https://api.baidu.com --https://www.baidu.com/api
接口操做的数据称之为 资源,在url中只体现资源名称(名称),不体现操做的方式动词
常规资源接口
--https://api.baidu.com/books/ --https://api.baidu.com/books/(pk)/
若是一个资源存在多版本结果,在url连接中要用特定符号来兼容多版本共存
v1 | v2
--https://api.baidu.com/v1/books/ --https://api.baidu.com/v2/books/
群资源操做,通常还有额外的限制条件,若是排序、限制调试、分页等等
? 限制条件
--https://api.baidu.com/v1/books/?ordering=-price&limit=3
五大请求方式
get:请求单个或多个资源 --https://api.baidu.com/books/ 群查,返回多个结果对象 --https://api.baidu.com/books/(pk)/ 单查,返回单个结果对象 post:新增单个或多个资源 --https://api.baidu.com/books/ 单增,提交单个数据字典,完成单增,返回单个结果对象 群增,提供多个数据字典的数组,完成群增,返回多个结果对象 put:总体修改单个或多个资源 --https://api.baidu.com/books/ 总体修改多个,提供多个数据字典的数组(数字字典中要包含主键),完成群改,返回多个结果对象 --https://api.baidu.com/books/(pk)/ 总体修改单个,提供单个数据字典(主键在url中提现),完成单改,返回单个结果对象 patch:局部修改单个或多个资源 方式与put彻底相同,不一样的是:操做的资源若是有5个key-value键值对,put请求提供的字典必须全包含,可是patch提供的字典包含的键值对0~5个均可以 delete:删除单个或多个资源 --https://api.baidu.com/books/ 多删,提供多个资源主键数据,完成群删,不作任何资源返回(通常咱们会返回结果信息:成功|失败) --https://api.baidu.com/books/(pk)/ 单删,不须要提供额外数据,完成单删,不作任何资源返回(通常咱们会返回结果信息:成功|失败)
响应对象中要包含网络状态码(网络转台信息和网络状态码捆绑出现,不要额外设置):
1xxx:基本信息 2xxx:成功 -200基本 201新增成功 3xxx:重定向 4xxx:客户端错误 -404错误请求;403请求无权限;404:请求资源不存在 5xxx:服务器错误 -500服务器错误
数据状态码(通常都是先后端规定):
0:成功 1:失败 -1xxx:具体失败信息(要在接口文档中明确写出) 2:无数据 -2xxx:具体无数据信息(要在接口中文档中明确写出)
数据状态信息(通常不单单是对象数据状态码的解释,更多的对结果的描述,给前台开发者阅读的)
数据结果(常量、数组、字典),若是有子资源(图片、音频、视频),返回资源的url连接
{ "status": 0, "msg": 'ok', "results": [{ "name": "西游记", "img": "https://api.baidu.com/media/book/xyj.png" }] }
1)as_view()是入口,获得view函数地址(路由层) 2)请求来了调用view函数,内部调用dispatch函数完成请求分发(请求以前) 3)dispatch函数将请求方式映射成视图类的同名方法,完成请求的处理,获得相应 (请求执行完毕) 4)再将相应的结果一层层返回 (返回结果)
1)as_view()是入口,获得view函数地址,在范围view函数地址时局部禁用csrf认证 2)请求来了调用view函数,内部调用(APIView类的)dispatch函数完成请求分发 3)dispatch函数 二次封装request、完成三大认证后,再将请求方式映射成视图类的同名方法,完成请求的处理,获得相应,再对相应作渲染处理 4)再将相应的结果一层层返回 apiView 的处理: as_view: 就干了一件事,禁用csrf认证 dispatch: 1)二次封装request 2)三大认证
前端发送请求数据——》headers(字典)
后端获取headers数据:request.META.get('HTTP_参数全大写')
后端settings配置CORS_ALLOW_HEADERS = [ ]
CORS_ALLOW_HEADERS = [ //容许请求头 "accept", "accept-encoding", "authorization", "content-type", "dnt", "origin", "user-agent", "x-csrftoken", "x-requested-with", "token", //自定义的参数 "owen", //自定义的参数 ]
META:后端获取前端发送的数据(除了文本数据外的全部数据)
能够在先后端分离的开发中提升开发Rest API接口的效率。
建立Django项目d-proj,而后建立vue项目v-proj,
在INSTALLED_APPS = [ 'corsheaders', 'app', 'api', ] 中注册
注释csrf中间件,导入模块,添加中间件
from django.middleware.common import CommonMiddleware MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware' ] CORS_ORIGIN_ALLOW_ALL = True
打开v-proj项目,添加npm的server服务,项目名v-proj,Scripts是serve
在App.vue文件中删除多余的代码,留下面的五句话
<template> <div id="app"> <router-view/> </div> </template>
去home.vue文件中删除home代码下面的两行代码,添加一个h1行标签
<h1>主页</h1>
script内保留下面的代码
<script> export default { name: 'home', components: { }, } </script>
运行项目,点击连接能够在页面上显示主页了
打开d_proj项目,在url中导入模块,添加url路由
from app import views url(r'^test/', views.test),
在views中导入模块,定义函数
from django.http import JsonResponse def test(request): return JsonResponse('ok',safe=False)
在home.vue中的script中添加created结果为
<script> export default { name: 'home', components: { }, created(){ } } </script>
在根目录下安装axios,命令以下:
cnpm install axios
在main.js中导入模块
import axios from 'axios' Vue.prototype.$axios = axios;
而后去home.vue文件中添加axios数据
created(){ this.$axios({ url:'http://127.0.0.1:8000/test', method:'get', params:{ a:1 }, data:{ x:10 } }).then(response => { console.log('成功:',response.data) }).catch(error => { console.log('失败:', error.response.data) }) }
而后去Django中viiews打印数据
def test(request): print(request.method) print(request.GET) print(request.body) return JsonResponse('ok', safe=False)
在home中添加headers
在django根目录中安装
pip3 install djangorestframework
在settings中配置
import rest_framework
在Django根目录下执行
python3 manage.py startapp api
把d_proj里面的urls文件复制粘贴到api文件中/