一、drf框架简介

1. drf安装

1、drf是django框架的一个插件,所以要先安装django;

2、安装命令:pip3 install djangorestframework

3、使用drf时,要在settings中注册

2. drf的优势

可以在前后端分离的开发中提高开发Rest API接口的效率。

二、接口

1. 接口的概念

什么是接口:规定了提交请求方式的url链接,访问它可以获取响应的反馈数据。也就是前后台信息交互的媒介。

接口的组成:url链接+请求方式+请求参数+响应数据

2. 接口文档

一个合格的接口应该有一份与之对应的文档,该文档可以帮助使用接口的用户更好更快的了解这个接口,从而进行开发。

文档的编写很简单,只需将接口的四个组成部分翻译成文档形式即可。

包括但不限于接口路径、请求方式、请求参数和响应数据的格式。

3. 接口规范(restful)

3.1 url链接规范

  1. 接口都是操作前后台数据的,所以需要保证数据的安全性,因此:

    • 采用https协议
  2. 接口用来操作数据,与网址(操作页面)有区别,所以用特定的关键字表示接口:

    • api关键字
    - https://api.baidu.com
    - https://www.baidu.com/api
  3. 接口操作的数据称之为资源,在url中只体现资源名称(名词),不体现操作资源的方式动词(即不用get_book这种命名方式)

    • 常规资源接口(只用名词)
    - https://api.baidu.com/books/
    - https://api.baidu.com/books/(pk)/
    • 非常规接口 - 和某资源不是特别密切或是不止一种资源(可用动词)
    - https://api.baidu.com/login/
    - https://api.baidu.com/place/search/
  4. 如果一个资源存在多版本结果,在url链接中要用特定符号来兼容多版本共存

    • v1|v2
    - https://api.baidu.com/v1/books/
    - https://api.baidu.com/v2/books/
  5. 群资源操作,一般还有额外的限制条件,如排序、限制调试、分页等等

    • ?+限制条件
    https://api.baidu.com/v1/books/?ordering=-price&limit=3

3.2 请求方式规范

五大请求方式:

  1. get:获取单个或多个资源

    - https://api.baidu.com/books/
    群查,返回多个结果对象 - https://api.baidu.com/books/(pk)/
    单查,返回单个结果对象
  2. post:新增单个或多个资源

    - https://api.baidu.com/books/
    单增,提交单个数据字典,完成单增,返回单个结果对象
    群增,提供多个数据字典的数组,完成群增,返回多个结果对象
  3. put:整体修改单个或多个资源

    - https://api.baidu.com/books/
    整体修改多个,提供多个数据字典的数组(数据字典中要包含主键),完成群改,返回多个结果对象 - https://api.baidu.com/books/(pk)/
    整体修改单个,提供单个数据字典(主键在url中体现),完成单改,返回单个结果对象
  4. patch:局部修改单个或多个资源

    方式与put完全相同,不同的是:操作的资源如果有5个key-value键值对,put请求提供的字典必须全包含,但是patch提供的字典包含的键值对0~5个都可以,就是不必包含所有可以修改的数据。
  5. delete:删除单个或多个资源

    - https://api.baidu.com/books/
    多删,提供多个资源主键数据,完成群删,不做任何资源返回(一般我们会返回结果信息:成功|失败) - https://api.baidu.com/books/(pk)/
    单删,不需要提供额外数据,完成单删,不做任何资源返回(一般我们会返回结果信息:成功|失败)

3.3 响应结果规范

  1. 网络状态码(网络状态信息和网络状态码捆绑出现,不要额外设置):

    • 1xx:基本信息
    • 2xx:成功
      • 200基本
      • 201新增成功
    • 3xx:重定向
    • 4xx:客户端错误
      • 400错误请求
      • 403请求无权限
      • 404请求资源不存在
    • 5xx:服务端错误
      • 500服务器错误
  2. 数据状态码(一般都是前后台约定规则):

    • 0:成功
    • 1:失败 - 1xx:具体失败信息(要在接口文档中明确写出)
    • 2:无数据 - 2xx:具体无数据信息(要在接口文档中明确写出)
  3. 数据状态信息(一般不仅仅是对数据状态码的解释,更多是对结果的描述,给前台开发者阅读的):

  4. 数据结果(常量、数组、字典),如果有子资源(图片、音频、视频),返回资源的链接:

    {
    "status": 0,
    "msg": 'ok',
    "results": [{
    "name": "西游记",
    "img": "https://api.baidu.com/media/book/abc.png"
    }]
    }

4. 规范接口的写法

一个资源一个对应十个接口

# urls.py
from django.conf.urls import url from . import views
urlpatterns = [
# http://127.0.0.1:8000/api/books/
# http://127.0.0.1:8000/api/books/(pk)/
url(r'^books/$', views.BookView.as_view()),
url(r'^books/(?P<pk>\d+)/$', views.BookView.as_view())
]
# views.py
from django.http import JsonResponse
from django.views import View
from . import models
# 一个视图类可以保护常规五个请求方法:get|post|put|patch|delete
# 五个请求方法处理十个资源操作的逻辑:单群查|单群增|单群整体改|单群局部改|单群删 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({
'status': 1,
'msg': '单查 资源不存在',
})
return JsonResponse({
'status': 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({
'status': 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() def post(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'post ok'
}) def put(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'put ok'
}) def patch(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'patch ok'
}) def delete(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'delete ok'
})

DRF简介/接口概念的更多相关文章

  1. BIRT使用1:简介、概念、元素、报表设计器组成

    前一篇博客对birt进行了一个初探,相信通过上篇博客大家对birt有个初步认识,接下来我们随着下面这张思维导图的展示,进入birt的使用学习. 这一篇博客是第一部分,主要介绍一下birt的简介.概念. ...

  2. drf框架接口文档

    drf框架接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 pip insta ...

  3. drf:restful概念,类继承关系,drf请求封装,drf请求流程,版本控制组件,认证组件(token),权限组件

    1.restful规范 resfful规范的概念最重要: 是一套规范,规则,用于程序之间进行数据交换的约定. 他规定了一些协议,对我们感受最直接的就是,以前写增删改查的时候需要些四个视图寒素,rest ...

  4. [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念

      本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...

  5. MII接口概念简述

    MII: Medium Independent Interface 媒体独立接口,也称介质无关接口 RMII: Reduced MII 简化媒体独立接口 GMII: Gigabit Medium In ...

  6. java基础—接口概念

    一.接口的概念 JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如“金丝猴是一种动物”,金丝猴从动物这个类继承,同时“金丝猴是一种值钱的东西”,金丝猴从“值钱的东西”这个类继承,同时“金丝猴 ...

  7. Java学习之接口概念

    Java语言只支持单重继承,不支持多继承,即一个类只能有一个父类.但是在实际应用中,又经常需要使用多继承来解决问题.为了解决该问题,Java语言提供接口来实现类的多继承问题. 接口(英文interfa ...

  8. Java面向对象----接口概念

    接口语法 interface 接口名{ //静态常量,抽象方法 } 特点 接口中只能存放静态常量和抽象方法 java接口是对功能的扩展 通过实现接口,java类可以实现多实现 一个类可以同时继承(ex ...

  9. drf 简介以及部分源码分析

    目录 复习 drf框架 全称:django-rest framework 知识点 接口 restful接口规范 基于restful规范的原生Django接口 主路由:url.py api组件的子路由: ...

随机推荐

  1. 「SCOI2005」互不侵犯 (状压DP)

    题目链接 在\(N\times N\) 的棋盘里面放 \(K\)个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共\(8\) 个格子 ...

  2. Luogu T16048 会议选址

    本题idea版权来自CSDN博客Steve_Junior的医院设置2. 并没有什么用的链接 题目背景 \(A\)国的国情十分独特.它总共有\(n\)个城市,由\(n-1\)条道路连接.国内的城市当然是 ...

  3. A. Little Pony and Expected Maximum

    Twilight Sparkle was playing Ludo with her friends Rainbow Dash, Apple Jack and Flutter Shy. But she ...

  4. poj1787 Charlie's Change

    Description Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie drives a lot and so he ofte ...

  5. Revit二次开发环境配置(Revit 2020 +Visual Studio 2019)

    Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)准备内容 Revit 2019开发环境的搭建,需要安装的内容如下: Revit 2019(主要的开发环境) Vi ...

  6. 数理统计8:点估计的有效性、一致最小方差无偏估计(UMVUE)、零无偏估计法

    在之前的学习中,主要基于充分统计量给出点估计,并且注重于点估计的无偏性与相合性.然而,仅有这两个性质是不足的,无偏性只能保证统计量的均值与待估参数一致,却无法控制统计量可能偏离待估参数的程度:相合性只 ...

  7. USB2.0协议学习笔记---描述符

     USB设备描述符 字段名 长  度(字节)  地址偏移 含           义 bLenth   1  0  描述符长度 bDescriptorType   1  1 描述符类型 (这里为 1) ...

  8. CSS字体大小: em与px、pt、百分比之间的对比

      CSS样式最混乱的一个方面是应用程序中文本扩展的font-size属性.在CSS中,你可以用四个不同的单位度量来显示在web浏览器中的文本大小.这四个单位哪一种最适合Web? 这个问题引起了广泛的 ...

  9. PWA App All In One

    PWA App All In One PWA in Action PWA Weather App https://pwa.xgqfrms.xyz/pwa-app/public/index.html c ...

  10. random array & shuffle 洗牌算法 / 随机算法

    random array & shuffle shuffle 洗牌算法 / 随机算法 https://en.wikipedia.org/wiki/Fisher–Yates_shuffle ES ...