drf框架, 接口(api) Django FBV => CBV drf框架的基础试图类 drf核心组件 群查与单查 python换源
""" 接口概念:前台与后台进行信息交互的媒介 - url链接 接口组成: url链接 - 长得像返回数据的url链接 请求方式 - get(查)、post(增)、put(整体改)、patch(局部改)、delete(删) 请求参数 - 拼接参数、数据包参数(urlencoded、form-data、json) 响应结果 - 响应的json数据 """
""" Postman: 官网下载、傻瓜式安装 """
获取get请求
获取post请求
请求百度地图接口
""" 1)为什么要写接口文档 为什么要写接口:作为后台开发者,要将后台数据通过url链接反馈给前台 为什么要写文档:作为后台开发者,一定知道改url链接应该采用什么请求方式、提交哪些数据、返回了哪些结果 就像后台要将url链接改前台一样,前台知道应该访问什么链接,所以前台也应该知道采用什么请求方式,以及提交什么数据。 换而言之,接口文档是给 后台开发者、前台开发者、测试等各个项目相关项目组同时查看的,方便团队开发(规则是后台指定的,文档后台来写) 2)编写文档 i)采用word编写 ii)drf框架有插件,可以根据cbv的类快速生成文档 iii)采用写文档的平台 3)书写过程 i)先安装开发需要,完成接口的开发(设置后台url链接,设置请求方式、请求数据、响应结果) ii)选择一个接口平台,将后台url链接,设置请求方式、请求数据、响应结果信息变成成文档即可 """
参考地址如上,可使用YApi,也可在自己服务器上搭建YApi项目
""" 1)为什么要指定接口规范 在前后台分离情况下,后台可以采用不同的后台运用,开发出类似的功能,所以前后台请求响应的规则是一致的;如果安装一套标准来编写接口,后台不管是什么语言,前台都可以采用一样的方式进行交互。反过来,后台也不需要管前台到底采用何种方式请求(页面、工具、代码) 2)通用的接口规范:Restful接口规范 - 规定了url如何编写;请求方式的含义;响应的数据规则 i)url编写 https协议 - 保证数据安全性 api字眼 - 标识操作的是数据 v1、v2字眼 - 数据的不同版本共存 资源复数 - 请求的数据称之为资源 拼接条件 - 过滤群查接口数据(https://api.baidu.com/books/?limit=3&ordering=-price) ii)请求方式
get - 查 - 返回查询的对象结果
post - 增 - 返回新增的对象结果
put|patch - 改 - 返回修改的对象结果
delete - 删 - 返回空 (可能会被问道)
/books/ - get - 群查 /books/(pk)/ - get - 单查 /books/ - post - 单增 /books/(pk)/ - put - 单整体改 /books/(pk)/ - patch - 单局部改 /books/(pk)/ - delete - 单删 iii)响应结果 网络状态码与状态信息:2xx | 3xx | 4xx | 5xx 数据状态码:前后台约定规则 - 0:成功 1:失败 2:成功无结果 数据状态信息:自定义成功失败的信息解释(英文) 数据本体:json数据 数据子资源:头像、视频等,用资源的url链接 """
""" 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) """
""" 1、采用国内源,加速下载模块的速度 2、常用pip源: -- 豆瓣:https://pypi.douban.com/simple -- 阿里:https://mirrors.aliyun.com/pypi/simple 3、加速安装的命令: -- >: pip install -i https://pypi.douban.com/simple 模块名 """
""" 1、文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:\Users\电脑用户\AppData\Roaming 文件夹中 2、新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件 3、新增 pip.ini 配置文件内容 """
""" 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 """
注:原生django框架支持form-data和urlencoded,对JSON并不解析,不够完善
不如DRF框架都解析
""" 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 """
应用是否需要在INSTALLED_APPS中注册
''' 在没有使用到app的一些特殊操作时(比如数据库相关),不需要app的__init__文件注册时,文件夹可以不用注册,但是注册后,应用的所有功能都能使用 结论:所有应用都可以完成注册 '''
""" 1)在models.py创建Model类 from django.db import models class Book(models.Model): name = models.CharField(max_length=64, verbose_name='书名') # verbose_name输入框左侧提示名 price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='价格') # 配置类 class Meta: verbose_name_plural = '图书' # admin表类名修改无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 """
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()
""" 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知识回顾) """