前后台的数据交互

前台安装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. 字符串——AC自动机

    目录 一.前言 二.思路 三.代码 四.参考资料 一.前言 以前一直没学AC自动机,主要是被名字吓到了,自动AC,这么强的名字肯定很难,学了后才发现,其实不难. AC自动机并不是Acept autom ...

  2. cisco路由的ip路由(一)

    路由Corp配置Corp#sh run Building configuration... Current configuration : 1652 bytes ! version 12.4 no s ...

  3. unsigned char 与unsigned long互换

    unsigned long UCharToULong(unsigned char * pucVar ){unsigned long ulTemp=0;ulTemp=(unsigned long)(*p ...

  4. 线性基求交(线段树)--牛客第四场(xor)

    题意: 给你n个基,q个询问,每个询问问你能不能 l~r 的所有基都能表示 x . 思路: 建一颗线性基的线段树,up就是求交的过程,按照线段树区间查询的方法进行check就可以了. #define ...

  5. 下载安装npm和cnpm

    下载安装npm http://nodejs.cn/download/ 下载安装cnpm 完成npm的安装后,再安装cnpm https://npm.taobao.org/ 切换源为 taobao 源 ...

  6. JAVA文件类工具

    FileUtil package cn.jiangzeyin.util.file; import org.springframework.util.Assert; import java.io.*; ...

  7. macOS Sierra 如何安装任何来源的软件

    为了安全性考虑,macos是要手动勾选来自任何来源的选项才可以安装第三方应用软件,系统升级后,在新的系统中这一项是默认不显示的,如果想要出现和这一勾选选项,可以从终端中输入 sudo spctl -- ...

  8. Go项目目录管理

    在Go的官网文档How to Write Go Code中,已经介绍了Go的项目目录一般包含以下几个: src 包含项目的源代码文件: pkg 包含编译后生成的包/库文件: bin 包含编译后生成的可 ...

  9. 关于获取某月某日最后一天时Calendar的cal.getActualMaximum(Calendar.DAY_OF_MONTH)的吐槽

    例如: 在2017.03.29-31号 新建一个Calendar的単例 设置年:2017 设置月:2 int day = cal.getActualMaximum(Calendar.DAY_OF_MO ...

  10. 爬虫框架Scrapy 的使用

    一.官网链接 https://docs.scrapy.org/en/latest/topics/architecture.html 二.Scrapy 需要安装的包 #Windows平台 # pip3 ...