一、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. 2019牛客多校第三场D-Big Integer

    题意 定义\(A(n)\) 为 n个1表示的十进制数,例如\(A(3) = 111\) 然后对于\(1 \le i \le n,1\le j \le m\) 问有多少的 \(pairs(i,j)\)满 ...

  2. 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)

    题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离.问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则 ...

  3. Jenkins+ant+Jmeter接口自动化框架搭建

    工具准备 JDK: jdk1.8.0_111 Ant: apache-ant-1.9.9 Jmeter: apache-jmeter-3.1 Jenkins: jenkins-2.7.4 JDK安装 ...

  4. 带有Python的音频处理(附带源码)

    由于博客播放不了音频,所以音频将以视频形式展现.公众号也正在进行抽书 音频素材请点击这里进行观看 往下拉就是文章地址 有时,在进行编程时,我们需要进行一些音频处理.编程中最常用的音频处理任务包括–加载 ...

  5. OpenStack Train版-3.安装glance镜像服务

    安装glance镜像服务 创建数据库并授权 mysql -u root create database glance; GRANT ALL PRIVILEGES ON glance.* TO 'gla ...

  6. Redis面试常见问题(一)

    一.redis 简介简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向.另外,redis 也经 ...

  7. 牛客网多校第5场 H subseq 【树状数组+离散化】

    题目:戳这里 学习博客:戳这里 题意:给n个数为a1~an,找到字典序第k小的序列,输出该序列所有数所在位置. 解题思路:先把所有序列预处理出来,方法是设一个数组为dp,dp[i]表示以i为开头的序列 ...

  8. Leetcode(11)-盛最多水的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线,使得 ...

  9. flex & align-content & justify-items

    flex & align-content & justify-items align-content 多行 align-items 的对其方式 https://developer.mo ...

  10. linux 必备 学习 资源 汇总 大全!

    Linux https://www.linux.com/ https://youtu.be/CE4WeUNFX2g https://www.youtube.com/watch?v=JzsLkbwi1L ...