前后台的数据交互

前台安装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规范的更多相关文章

  1. vue项目和django项目交互补充,drf介绍,restful规范

    目录 一.vue项目与django项目的交互 二.drf(Django-restframework) 1. drf主要知识点 2. drf框架安装 3. web接口(WEB API) 4. restf ...

  2. 接口、RESTful规范、DRF

    接口 #接口:url连接,通过向链接发送不同的类型请求与参数得到相应的响应数据 #1.在视图书写处理请求的 视图函数 #2.在路由层为视图函数配置 url链接=>产生接口 #3.前台通过ajax ...

  3. 一、restful规范 二、CBV(View)源代码执行流程 三、drf框架安装和简单使用

    一.restful规范 ''' 它是一个规范,面向资源架构 十条规范 1.API与用户的通讯协议,总是使用HTTPs协议,确保了网络传输的安全性 2.域名 --https://api.example. ...

  4. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...

  5. DRF cbv源码分析 restful规范10条 drf:APIView的源码 Request的源码 postman的安装和使用

    CBV 执行流程 路由配置:url(r'^test/',views.Test.as_view()),  --> 根据路由匹配,一旦成功,会执行后面函数(request) --> 本质就是执 ...

  6. DRF之restful规范、Postman接口测试

    一. DRF简介 Django REST框架是一个功能强大且灵活的工具包,用于构建Web API. 使用REST框架的一些原因: 该网站可浏览API是你的开发人员一个巨大的可用性胜利. 身份验证策略包 ...

  7. 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 ...

  8. 01 drf源码剖析之restful规范

    01 restful规范 目录 01 restful规范 1. 什么是restful规范 2.restful规范详细 1. 什么是restful规范 restful是一套规则,是程序间进行数据传输的一 ...

  9. DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等

    DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...

随机推荐

  1. firefox PAC代理

    在linux用firefox,又不像windows下的chrome那样,可以直接设置个自动代理,但是发现firefox有个自动代理的功能哦. /home/allen/Documents/google. ...

  2. C++学习笔记-引用

    引用是C语言中没有,而在C++中又很重要的一个概念,通过应用,可以得到变量本身,相对于得到变量的值而言,有更大的操作空间. 普通引用 变量的本质 变量名实质上是一段连续存储空间的别名,是一个标号 程序 ...

  3. Android selector一些坑

    最近给textview添加seletor时,发现textcolor和background要分开成两个selector.并且,textcolor的要再res路径下建color路径,然后在color下面建 ...

  4. flask的方法视图

    from flask import Flask,views,render_template,request app = Flask(__name__) app.debug = True class L ...

  5. 树莓派4B 串口通信

    提前下载安装Glade图形编辑器 参考 树莓派4B安装netcore 环境部署.发布.执行操作 准备串口设备本文使用串口控制继电器设备 如图 1.发现串口 void GetSerialPort() { ...

  6. MYSQL—第一部分(简介和windows版本的安装)

    一.概述 1.什么是数据库 ? 答:数据的仓库,如:在自己编写的程序中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQLServe ...

  7. 【案例分享】SpreadJS金融行业应用实践,开发基于Web Excel的指标补录平台

    SpreadJS作为一款基于 HTML5 的纯前端电子表格控件,以“高速低耗.高度类似Excel.可无限扩展”为产品特色,提供移动跨平台和浏览器支持,可同时满足 .NET.Java.App 等应用程序 ...

  8. 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)

    题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...

  9. python-redis-订阅和发布

    发布:redishelper.py import redis class RedisHelper: def __init__(self): self.__conn = redis.Redis(host ...

  10. API 网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd

    前几天拜读了 OpsGenie 公司(一家致力于 Dev & Ops 的公司)的资深工程师 Turgay Çelik 博士写的一篇文章(链接在文末),文中介绍了他们最初也是采用 Nginx 作 ...