前后台的数据交互

前台安装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. 8 Spring / Spring MVC / Mybatis 框架相关知识点

    1)Spring 的 IOC 和 AOP 有了解吗? IOC:控制反转,不需要手动 new 对象,将其交给 Spring 容器,降低程序耦合度. AOP:面向切面编程,动态代理技术.

  2. Leetcode之广度优先搜索(BFS)专题-1162. 地图分析(As Far from Land as Possible)

    Leetcode之广度优先搜索(BFS)专题-1162. 地图分析(As Far from Land as Possible) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. ...

  3. flask standrad class 使用

    from flask import Flask,views,url_for app = Flask(__name__) class IndexView(views.View): def dispatc ...

  4. 牛客小白月赛14 -A (找规律+除数取模)

    题目链接:https://ac.nowcoder.com/acm/contest/879/A 题意:有n个城市,编号1~n,k天,第一天位于城市1,要求最后一天在城市1,且相邻两天不在同一个城市,求方 ...

  5. 使用HTMLTestRunner生产报告

    HTMLTestRunner下载安装及用法 1. 说明 HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告 本文针对Pyt ...

  6. Luogu P3810 【模板】三维偏序(陌上花开)(CDQ分治)

    题目 以三维偏序为例来讲一下CDQ分治. CDQ的本质就是把一个序列分成两段,计算左边对右边的贡献,然后分治. 不过一般都是先分治到底再从下往上算,这样可以先归并再算. 比如这道题,我们先按第一维排序 ...

  7. Java Web开发技术教程入门-Model1和Model2

    今天我们聊聊JSP开发中的Model1和Model2. Model1采用了JSP+JavaBean技术开发Web应用.其中,JSP实现页面显示,业务逻辑和流程控制,数据处理由JavaBean完成.在J ...

  8. Java Web开发技术教程入门-JavaBean组件与Servlet

    补更:阅战阅勇第7/8/9Days笔记 昨天我们了解了JDBC技术的一些日常操作,对于数据库而言,不仅仅的只有"增,删,改,查".博主觉得最重要的是SQL语句的优化,一个" ...

  9. Codeforces 1178B. WOW Factor

    传送门 显然对每个 $o$ ,考虑左边和右边分别有多少 $w$,那么这个 $o$ 的贡献就是左右 $w$ 的出现次数相乘 $w$ 的出现次数可以直接根据每一段连续的 $v$ 得到 那么从左到右扫一遍, ...

  10. sql server select和set赋值的区别

    --SQL Server中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT --当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法 (1)SELECT可以在一条语句里对 ...