restful规范以及drf框架 一、接口 二、FBV vs CBV 三、CBV源码分析 四、pip换源 五、DRF框架 六、小结

1、接口的基本概念

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

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

2、开发阶段接口的测试工具

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

3、接口文档

"""
1)为什么要写接口文档
    为什么要写接口:作为后台开发者,要将后台数据通过url链接反馈给前台
    为什么要写文档:作为后台开发者,一定知道该url链接应该采用什么请求方式、提交哪些数据、返回了哪些结果
就像后台要将url链接给前台一样,前台知道应该访问什么链接,所以前台也应该知道采用什么请求方式,以及提交什么数据。
    换而言之,接口文档是给 后台开发者、前台开发者、测试等各个项目相关项目组同时查看的,方便团队开发(规则是后台指定的,文档后台来写)
    
2)编写文档
    i)采用word编写
    ii)drf框架有插件,可以根据cbv的类快速生成文档
    iii)采用写文档的平台比如yapi
    
3)书写过程
    i)先安装开发需要,完成接口的开发(设置后台url链接,设置请求方式、请求数据、响应结果)
    ii)选择一个接口平台,将后台url链接,设置请求方式、请求数据、响应结果信息变成成文档即可
"""

4、接口规范

"""
1)为什么要指定接口规范
    在前后台分离情况下,后台可以采用不同的后台语言,开发出类似的功能,所以前后台请求响应的规则是一致的;如果安装一套标准来编写接口,后台不管是什么语言,前台都可以采用一样的方式进行交互。反过来,后台也不需要管前台到底采用何种方式请求(页面、工具、代码)
    
2)通用的接口规范:Restful接口规范 - 规定了url如何编写;请求方式的含义;响应的数据规则
    i)url编写
        https协议 - 保证数据安全性
        api字眼 - 标识操作的是数据
        v1、v2字眼 - 数据的不同版本共存
        资源复数 - 请求的数据称之为资源
        拼接条件 - 过滤群查接口数据(https://api.baidu.com/books/?limit=3&ordering=-price)
        
    ii)请求方式
        /books/ - get - 群查
        /books/(pk)/ - get - 单查
        /books/ - post - 单增
        /books/(pk)/ - put - 单整体改
        /books/(pk)/ - patch - 单局部改
        /books/(pk)/ - delete - 单删
    
    iii)响应结果
        网络状态码与状态信息:2xx | 3xx | 4xx | 5xx
            200:常规请求 201:创建成功
            301:永久重定向 302:暂时重定向
            403:请求权限不足 404:请求路径不存在 405:请求方法不存在
            500:服务器异常
        数据状态码:前后台约定规则比如 - 0:成功 1:失败 2:成功无结果
        数据状态信息:自定义成功失败的信息解释(英文)
        数据本体:json数据
        数据子资源:头像、视频等,用资源的url链接
"""

二、FBV vs CBV

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

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

-------
三个View其实是同一个类
继承View的目的:
    i)继承as_view()方法,完成路由的配置
    ii)继承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 JsonResponse('cbv ok', safe=False)
"""

三、CBV源码分析

  通过刚刚的演示,我们可以看到我们朝login提交get请求会自动执行Mylogin里面的get方法,而提交post请求也会自动的执行Mylogin里面的post方法,那么为什么Mylogin可以针对不同的请求方式会自动执行相对应的方法,接下来我们就来研究下Django中的CBV源码剖析

1、研究源码的突破口

  url(r'^login/', views.Mylogin.as_view())

  猜想:

    as_view要么是类里面定义的普通函数 @staticmethod

    要么是类里面定义的绑定给类的方法 @classmethod

  所以接下来我们就点进去as_view看下,结果看源码发现是@classmethod,可以确定是绑定给类的方法

注意:看源码并一定要每一句都能够看懂 只看自己能够看懂的即可

2、演示

restful规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

restful规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

restful规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

restful规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

四、pip换源

1、源介绍

"""
1、采用国内源,加速下载模块的速度
2、常用pip源:
    -- 豆瓣:https://pypi.douban.com/simple
    -- 阿里:https://mirrors.aliyun.com/pypi/simple
-- 清华:https://pypi.tuna.tsinghua.edu.cn/simple   3、加速安装的命令: -- >: pip install -i https://pypi.douban.com/simple 模块名(注意这个是临时使用)
"""

2、永久配置安装源

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 配置文件内容
"""

3、配置文件内容

"""
[global]
index-url = http://pypi.douban.com/simple
[install]
use-mirrors =true
mirrors =http://pypi.douban.com/simple/
trusted-host =pypi.douban.com
"""

五、DRF框架

1、安装

"""
1)安装
>: pip install djangorestframework

2)在settings中注册(为什么要注册,后期会讲)
INSTALLED_APPS = [
    # ...
    'rest_framework',
]

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

4)drf的封装特点:特点功能在特点模块下
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.request import Request
"""

2、图书资源准备

"""
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 = '图书'  # 让admin后台显示中文去除掉_plural后台会加s

    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规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

restful规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

restful规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

restful规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

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

urlpatterns = [
    # 资源books接口的设计
    url(r'^books/$', views.BookAPIView.as_view()),  # 群查、单增
    url(r'^books/(?P<pk>d+)/$', views.BookAPIView.as_view()),  # 单查、单删、单(整体|局部)改    # 这是有名分组,一般用PK不用id
]

4、实现单查群查接口

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): # *args接收所有的无名分组,**kwargs接收有名分组 pk = kwargs.get('pk') if pk: # 单查逻辑 return self._single_get(pk) else: # 群查逻辑 return self._multiple_get()

restful规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

restful规范以及drf框架
一、接口
二、FBV vs CBV
三、CBV源码分析
四、pip换源
五、DRF框架
六、小结

六、小结

"""
1)接口:
    概念:前后台数据交互的桥梁
    组成:url链接 + 请求方法 + 请求数据 + 响应结果
    文档:将接口的四个组成部分书写成一个使用文档
    工具:Postman
    
2)Restful接口规范:
    i)url链接:https、api、books、v1、?limit=3
        https://www.baidu.com/api/v1/books/?limit=3
    ii)请求方式:get、post、put、patch、delete
        用不同请求方式代表操作资源的不同目的
    iii)响应结果
        网络状态码,状态信息 - 规定好的
        数据状态码,状态信息 - 开发自己约定的
        数据本地 - json数据
        子资源 - 图片、视频返回资源的url链接

3)cbv与fbv
    高内聚低耦合、生命周期 as_view() => dispatch() => 视图类响应方法
    
4)drf的安装
    pip install djangorestframework
    封装特点:特点功能在特定模块下
    
5)pip换源

6)基于restful规定的接口设计
    url(r'^books/$', views.BookAPIView.as_view()),  # 群查、单增
    url(r'^books/(?P<pk>d+)/$', views.BookAPIView.as_view()),  # 单查、单删、单(整体|局部)改
    
7)资源的单查群查案例(orm知识回顾)

"""