1223 drf引入以及restful规范
前后台的数据交互
前台安装axios插件,进行与后台的数据交互
- 安装axios,并在main.js中设置
- params传递拼接参数
- data携带数据包参数
- headers中发送头部信息,但是必须使用
authorization才能携带
<script>
export default {
name: 'home',
components: {
},
created(){
this.$axios({
url:'http://127.0.0.1:8000/test/',
method:'get',
// 拼接参数
params:{
a:1
},
// 数据包参数
data:{
x:10
},
headers:{
// 前台的认证信息携带必须由authorization携带
authorization:'abc.def11111111111'
}
}).then(response => {
console.log('成功',response.data)
}).catch(error => {
console.log('shibai',error.response.data)
})
}
}
</script>
后台进行接受参数
- 必须设置cors
- headers信息使用META中HTTP_AUTHORIZATION接收
def test(request):
print(request.method)
print(request.GET) # 获取拼接参数
print(request.body) # 获取数据包参数
# 获取前端的headers信息 必需在META中HTTP_AUTHORIZATION接收
print(request.META.get('HTTP_AUTHORIZATION'))
return JsonResponse('ok',safe=False)
自定义请求头数据META
在django中settings中设置
前端发送的请求头数据,都会在META中存放,包括自定义的请求头数据
后台获取: request.META.get('HTTP_参数名全大写')
CORS_ALLOW_HEADERS = [
"accept",
"accept-encoding",
"authorization",
"content-type",
"dnt",
"origin",
"user-agent",
"x-csrftoken",
"x-requested-with",
# 自定义的请求头接受数据
"token",
"owen",
]
drf
知识点概括
全称: Django-restframework
## 1.接口
* 接口的概念
* 数据接口文档
* 接口规范(restful)
* Postman接口测试工具
## 2.drf请求周期
## 3.drf的基础组件
* 请求
* 响应
* 渲染
* 解析
* 异常
## 4.drf的序列化(核心)
* 序列化
* 模型序列化
* 群操作序列化
## 5.drf的视图家族
* 视图类(常用)
* 视图工具类
* 工具视图类(常用)
* 视图集
## 6.drf的三大认证(核心)
* 认证
* 权限
* 频率
## 7.drf的过滤
* 筛选
* 搜索
* 排序
* 分页
* 区间
1. 框架安装
- drf是Django的框架,所以要提前安装Django
- 安装命令:
pip install djangorestframework - 使用drf时,要在settings中注册
2. 接口
2.1 什么是接口
规定了提交请求参数的请求方式,访问其可以获取响应的反馈数据的url链接
四部分:
url链接 + 请求方式 + 请求参数 + 响应数据
小猿取经https://www.cnblogs.com/xiaoyuanqujing/articles/11869745.html
返回网页的叫网址,返回数据的叫做接口
2.2 接口文档
编写接口文档,使用yapi
详情见小猿取经
2.3 接口工具的使用
将接口使用postman进行测试
postman网址
6E823f587c95f0148c19993539b99295

2.4 restful接口规范
1. url链接
通常采用https协议
接口都是操作前后台数据的,所以需要保证数据的安全性
使用api关键字标识接口url
接口用来操作数据,与网址(操作页面)有区别,所以用特定的关键字表示接口
- https://api.baidu.com
- https://www.baidu.com/api通常使用资源的复数形式,不要出现操作资源的动词
接口操作的数据称之为`资源`,在url中只体现 `资源名称(名词)`,不体现`操作资源的方式(动词)` 常规资源接口
- https://api.baidu.com/books/
- https://api.baidu.com/books/(pk)/ 非常规接口
- 和某资源不是特别密切或是不止一种资源
- https://api.baidu.com/login/
- https://api.baidu.com/place/search在url链接中标识数据版本
如果一个资源存在多版本结果,在url链接中要用特定的符号来兼容多版本共存 v1|v2
- https://api.baidu.com/v1/books/
- https://api.baidu.com/v1/books/群资源操作,一般还有额外的限制条件,如排序,限制调试,分页等等
?限制条件
- https://api.baidu.com/v1/books/?ordering=-price&limit=3
按照价格降序,并且只显示3本
2. 五大请求方式
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)/
单删,不需要提供额外数据,完成单删除,不做任何资源返回(但一般我们会返回结果信息:成功|失败)
3. 响应结果
网络状态码:
网络状态信息和网络状态码捆绑出现,不要额外设置 1xx:基本信息
2xx: 成功
-200 基本
-201 新增成功
3xx:重定向
4xx: 客户端错误
- 400 错误请求
- 403 请求无权限
- 404 请求资源不存在
5xx: 服务端错误
- 500 服务器错误数据状态码(一般都是前后台约定规则)
0: 成功
1: 失败
1xx: 具体失败信息(要在接口文档中明确写出)
2: 无数据
2xx: 具体无数据信息(要在接口文档中明确写出)数据状态信息
一般不仅仅是对数据状态码的解释,更多的是对结果的描述,给前台开发者阅读的数据结果
常量数组字典,如果有子资源(图片,音频,视频),返回资源的url连接{
'status':0,
'msg':'ok',
'results':[{
'name':'西游记,
'img':'https://api.baidu.com/book/xyj.png'
}]
}
debug的使用

views.py
查询数据的方式
# 一个视图类可以包含常规五个请求方法
# 五个请求方法处理是个资源操作的逻辑
class BookView(View):
# 单查数据
def _single_get(self,pk):
book_dic = models.Book.objects.filter(pk=pk).values('name','price').first()
if not book_dic:
return JsonResponse({
'static': 1,
'msg': '单查资源不存在',
})
return JsonResponse({
'static':0,
'msg':'单查ok',
'results':book_dic
})
# 群查数据
def _many_get(self):
book_query = models.Book.objects.values('name','price')
book_list = list(book_query)
return JsonResponse({
'static':0,
'msg':'群差ok',
'results':book_list
})
# 查询数据
def get(self,request,*args,**kwargs):
pk = kwargs.get('pk')
if pk:
return self._single_get(pk)
else:
return self._many_get()
1223 drf引入以及restful规范的更多相关文章
- vue项目和django项目交互补充,drf介绍,restful规范
目录 一.vue项目与django项目的交互 二.drf(Django-restframework) 1. drf主要知识点 2. drf框架安装 3. web接口(WEB API) 4. restf ...
- 接口、RESTful规范、DRF
接口 #接口:url连接,通过向链接发送不同的类型请求与参数得到相应的响应数据 #1.在视图书写处理请求的 视图函数 #2.在路由层为视图函数配置 url链接=>产生接口 #3.前台通过ajax ...
- 一、restful规范 二、CBV(View)源代码执行流程 三、drf框架安装和简单使用
一.restful规范 ''' 它是一个规范,面向资源架构 十条规范 1.API与用户的通讯协议,总是使用HTTPs协议,确保了网络传输的安全性 2.域名 --https://api.example. ...
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...
- DRF cbv源码分析 restful规范10条 drf:APIView的源码 Request的源码 postman的安装和使用
CBV 执行流程 路由配置:url(r'^test/',views.Test.as_view()), --> 根据路由匹配,一旦成功,会执行后面函数(request) --> 本质就是执 ...
- DRF之restful规范、Postman接口测试
一. DRF简介 Django REST框架是一个功能强大且灵活的工具包,用于构建Web API. 使用REST框架的一些原因: 该网站可浏览API是你的开发人员一个巨大的可用性胜利. 身份验证策略包 ...
- 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 ...
- 01 drf源码剖析之restful规范
01 restful规范 目录 01 restful规范 1. 什么是restful规范 2.restful规范详细 1. 什么是restful规范 restful是一套规则,是程序间进行数据传输的一 ...
- DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等
DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...
随机推荐
- 8 Spring / Spring MVC / Mybatis 框架相关知识点
1)Spring 的 IOC 和 AOP 有了解吗? IOC:控制反转,不需要手动 new 对象,将其交给 Spring 容器,降低程序耦合度. AOP:面向切面编程,动态代理技术.
- Leetcode之广度优先搜索(BFS)专题-1162. 地图分析(As Far from Land as Possible)
Leetcode之广度优先搜索(BFS)专题-1162. 地图分析(As Far from Land as Possible) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. ...
- flask standrad class 使用
from flask import Flask,views,url_for app = Flask(__name__) class IndexView(views.View): def dispatc ...
- 牛客小白月赛14 -A (找规律+除数取模)
题目链接:https://ac.nowcoder.com/acm/contest/879/A 题意:有n个城市,编号1~n,k天,第一天位于城市1,要求最后一天在城市1,且相邻两天不在同一个城市,求方 ...
- 使用HTMLTestRunner生产报告
HTMLTestRunner下载安装及用法 1. 说明 HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告 本文针对Pyt ...
- Luogu P3810 【模板】三维偏序(陌上花开)(CDQ分治)
题目 以三维偏序为例来讲一下CDQ分治. CDQ的本质就是把一个序列分成两段,计算左边对右边的贡献,然后分治. 不过一般都是先分治到底再从下往上算,这样可以先归并再算. 比如这道题,我们先按第一维排序 ...
- Java Web开发技术教程入门-Model1和Model2
今天我们聊聊JSP开发中的Model1和Model2. Model1采用了JSP+JavaBean技术开发Web应用.其中,JSP实现页面显示,业务逻辑和流程控制,数据处理由JavaBean完成.在J ...
- Java Web开发技术教程入门-JavaBean组件与Servlet
补更:阅战阅勇第7/8/9Days笔记 昨天我们了解了JDBC技术的一些日常操作,对于数据库而言,不仅仅的只有"增,删,改,查".博主觉得最重要的是SQL语句的优化,一个" ...
- Codeforces 1178B. WOW Factor
传送门 显然对每个 $o$ ,考虑左边和右边分别有多少 $w$,那么这个 $o$ 的贡献就是左右 $w$ 的出现次数相乘 $w$ 的出现次数可以直接根据每一段连续的 $v$ 得到 那么从左到右扫一遍, ...
- sql server select和set赋值的区别
--SQL Server中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT --当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法 (1)SELECT可以在一条语句里对 ...