zoukankan      html  css  js  c++  java
  • DRF框架之安装、接口

    DRF框架之安装、接口

    DRF框架总览

    • 接口(api):
      什么是接口
      接口文档
      接口规范

    • FBV => CBV:Function|Class Base View
      CBV的请求生命周期
      CBV比FBV的优势

    • drf框架的基础试图类
      APIView:请求模块、解析模块、渲染模块、响应模块、异常模块

    • drf核心组件
      序列化组件:将后台的任何数据,进行序列化返回给前台;将前台的数据反序列化成后台model对象再入库
      三大认证组件:认证组件、权限组件(RBAC)、频率组件
      视图家族:View一系列组件

    • 群查接口相关组件:
      搜索、筛选、排序、分页

      目的:
      必须掌握:六大基础接口 - 单查、群查、单增、单局部改、单整体改、单删
      一共十大接口 - 群增、群局部改、群整体改、群删

    接口

    接口的概念:前台与后台进行信息交互的媒介 - url链接

    接口的组成:

    • url链接 - 长的像返回数据的url链接
    • 请求方式 - get(查)、post(增)、put(整体改)、patch(局部改)、delete(删)
    • 请求参数 - 拼接参数、数据包参数(urlencoded、form-data、json)
    • 响应结果 - 响应的json数据

    开发阶段接口测试工具

    Postman:官网下载、傻瓜式安装

    :每个公司可能会有自己的接口测试工具,postman属于开源接口。

    接口文档

    一、 为什么要写接口文档

    1. 为什么要写接口:作为后台开发者,要将后台数据通过url链接反馈给前台

    2. 为什么要写文档:作为后台开发者,一定知道改url链接应该采用什么样请求方式,提交那些数据,返回了那些结果。

      就像后台要将url链接改前台一样,前台知道应该访问什么链接,所以前台也应该知道采用什么请求方式,以及提交什么数据。

      换而言之,接口文档是给,后台开发者、前台开发者、测试等各个项目相关项目组同时查看的,方便团队开发(规则是后台指定的,文档后台来写)

    二、 编写文档

    1. 采用word编写

    2. drf框架有插件,客户愿意根据cbv的类快速生成文档

    3. 采用写文档的平台

      三种方式都有使用(偏向第三种居多,类似上面的 postman)

    三、书写过程

    1. 先安装开发需要,完成接口的开发(设置后台url链接,设置请求方式、请求数据、响应结果)
    2. 选择一个接口平台,将后台url链接,设置请求方式、请求数据、响应结果信息变成文档即可

    接口规范

    一、 为什么要指定接口规范

    • 在前后台分离情况下,后台可以采用不同的后台运用,开发出类似的功能,所以前后台请求响应的规则是一致的:如果安装一套标准来编写接口,后台不管是什么语言,前台都可以采用一样的方式进行交互。反过来,后天也不需要管前台到底采用何种方式请求(页面、工具、代码)

    二、通用的接口规范:Restful接口规范 - 规定了url如何编写;请求方式的含义;响应的数据股则

    1. url编写

      https协议 - 保证数据安全性

      api字眼 - 标识操作的是数据

      v1、v2字眼 - 数据的不同版本共存

      资源复数 - 请求的数据称之为资源

      拼接条件 - 过滤群查接口数据(https://api.baidu.com/books/?limit=3&ordering=-price)

    2. 请求方式

    /books/ - get - 群查
    /books/(pk) - get - 单查
    /books/ - post - 单增
    /books/(pk) - put - 单整体改
    /books/(pk) - patch - 单局部改
    /books/(pk) - delete - 单删
    
    1. 响应结果

      网络状态码与状态信息:2xx | 3xx | 4xx | 5xx

      数据状态码:前后台约定规则 - 0:成功、1:失败、2:成功无结果

      数据状态信息:自定义成功失败的信息解释(英文)

      数据本体:json数据

      数据子资源:头像、视频等,用资源的url链接

    FBV => CBV:Function|Class Base View

    一、 路由绑定

    urlpatterns = [
        #1) 项目启动,将test函数地址绑定给/test/路由
        #2)请求/test/访问后台,后台就会调用绑定的test函数
        url(r'^test/$',views.test)
        
        #1)项目启动,将as_view()函数执行结果返回的view函数地址绑定给/test/路由
        #2)请求/test/访问后台,后台就会调用绑定view函数
        #3)view函数会将请求交给dispath方法完成分发,分发(反射)给视图函数类的不同方法处理请求
        ur(r'test/$',view.Test.as_view()).
    ]
    

    二、 业务处理

    1. fbv没一个接口都会对应一个函数来响应请求
    2. cbv可以将一个资源的 增删改查所有操作放在一个类中管理,在内部再分方法逐步一处理(高内聚低耦合:六个接口和一个类有关,但都能在类内部处理)

    三个view其实是同一个类

    继承view的母的:

    1. 继承as_view()方法,完成路由的配置
    2. 继承dispath()方法,完成请求分发

    :如果自己写as_view()和dispath()方法,自定义视图类可以不用继承任何类的

    from django.http import JsonResponse
    from django.views import View
    from django.views.generic import View
    from django.views.generic.base import View
    Class Test(View):
        def get(self,request,*args,**kwargs):
            return JsonRseponse('cbv ok',safe=False)
    

    DRF框架的基础视图类

    DRF框架的安装

    1. 安装

      pip install djangorestframework

    2. 在settings中注册(为什么要注册,后期再讲)

      INSTALLED_APPS = [
          #...
          'rest_framework',
      ]
      
    3. 在settings中自定义drf配置

      注:drf配置查找顺序,自定义settings的REST_FRMEWORK配置字典 => drf默认settings的DEFAULTS,REST_FRAMEWORK = {}

    4. drf的封装特点:特点功能在特点模块下

      from rest_framework.views import APIView
      from rest_framework.response import Response
      from rest_framework.requeset import Request
      

    案例:

    图书资源准备:

    1)在models.py创建Model类
    from django.db import models
    class Book(models.Model):
        name = models.CharField(max_length=64, verbose_name='书名')
        price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='价格')
    
        # 配置类
        class Meta:
            verbose_name_plural = '图书'
    
        def __str__(self):
            return self.name
            
    2)在admin.py中注册Model类,方便在后台(admin)可视化管理数据
    from django.contrib import admin
    from . import models
    admin.site.register(models.Book)  # admin要控制的model都需要注册一下
    
    3)数据库迁移操作
    >: python manage.py makemigrations
    >: python manage.py migrate
    >: python manage.py createsuperuser
    	admin | Admin123
    	
    4)浏览器登录admin录入数据:http://localhost:8000/admin
    

    基于restful接口规范的接口设计

    urlpatterns = [
        # 资源books接口的设计
        url(r'^books/$', views.BookAPIView.as_view()),  # 群查、单增
        url(r'^books/(?P<pk>d+)/$', views.BookAPIView.as_view()),  # 单查、单删、单(整体|局部)改
    ]
    

    实现单查群查接口

    from rest_framework.views import APIView
    from rest_framework.response import Response
    from . import models
    class BookAPIView(APIView):
        def _multiple_get(self):
            # 不能返回,数据是QuerySet[Obj, Obj],也不能强制转换list
            # return list(models.Book.objects.all())
    
            # QuerySet[dict, dict]
            # print(models.Book.objects.values('name', 'price'))
            # QuerySet[tuple, tuple]
            # print(models.Book.objects.values_list('name', 'price'))
    
            return Response(list(models.Book.objects.values('name', 'price')))
    
        def _single_get(self, pk):
            # return Response(models.Book.objects.filter(pk=pk).values('name', 'price').first())
    
            # 开发阶段建议能用try的地方,不要使用if判断
            try:
                return Response(models.Book.objects.values('name', 'price').get(pk=pk))
            except:
                return Response('资源不存在')
    
        # 单查、群查
        def get(self, request, *args, **kwargs):
            pk = kwargs.get('pk')
            if pk:
                # 单查逻辑
                return self._single_get(pk)
            else:
                # 群查逻辑
                return self._multiple_get()
    

    补充

    国际化配置

    作用:浏览器显示的语言,时区,数据库的同步时间

    pip安装源

    1. 采用国内源,加速下载模块的速度

    2. 常用pip源:

      –豆瓣:https://pypi.douban.com/simple

      –阿里:https://mirrors.aliyun.com/pypi/simple

    3. 加速安装的命令

      –>:pip install -i https://pypi.douban.com/simple 模块名

    永久配置安装源

    windows

    1、文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:Users电脑用户AppDataRoaming 文件夹中
    2、新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件
    3、新增 pip.ini 配置文件内容

    MacOS、Linux

    1、在用户根目录下 ~ 下创建 .pip 隐藏文件夹,如果已经有了可以跳过
    – mkdir ~/.pip
    2、进入 .pip 隐藏文件夹并创建 pip.conf 配置文件
    – cd ~/.pip && touch pip.conf
    3、启动 Finder(访达) 按 cmd+shift+g 来的进入,输入 ~/.pip 回车进入
    4、新增 pip.conf 配置文件内容

    配置文件的内容

    [global]
    index-url = http://pypi.douban.com/simple
    [install]
    use-mirrors =true
    mirrors =http://pypi.douban.com/simple/
    trusted-host =pypi.douban.com
    
    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    npm脚本和package.json
    Vue官方文档笔记(二)
    Vue官方文档笔记
    2019windows上安装Mac OS 10.14过程详细截图
    三次握手四次挥手
    ==和equals的区别
    Stringbuffer和Stringbuilder的区别
    字符串拼接五种常用方法
    什么是线程以及保证线程安全
    什么是线程安全,怎样保证线程安全
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863869.html
Copyright © 2011-2022 走看看