热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1223drf引入以及restful规范

[toc]前后台的数据交互前台安装axios插件,进行与后台的数据交互安装axios,并在main.js中设置params传递拼接参数data携带数据包参数headers中发送头部


目录




  • 前后台的数据交互

  • drf

    • 知识点概括

    • 1. 框架安装

    • 2. 接口

      • 2.1 什么是接口

      • 2.2 接口文档

      • 2.3 接口工具的使用

      • 2.4 restful接口规范


    • debug的使用





前后台的数据交互

前台安装axios插件,进行与后台的数据交互



  • 安装axios,并在main.js中设置

  • params传递拼接参数

  • data携带数据包参数

  • headers中发送头部信息,但是必须使用authorization才能携带

后台进行接受参数



  • 必须设置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()


推荐阅读
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 几何画板展示电场线与等势面的交互关系
    几何画板是一款功能强大的物理教学软件,具备丰富的绘图和度量工具。它不仅能够模拟物理实验过程,还能通过定量分析揭示物理现象背后的规律,尤其适用于难以在实际实验中展示的内容。本文将介绍如何使用几何画板演示电场线与等势面之间的关系。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
author-avatar
toto333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有