drf基础
API接口
Api接口也就是所谓的应用程序接口,api接口的全称是Application Program Interface,通过API接口可以实现计算机软件之间的相互通信,开发人员可以通过API接口程序开发应用程序,可以减少编写无用程序,减轻编程任务,API 同时也是一种中间件,为各种不同平台提供数据共享。根据单个或分布式平台上不同软件应用程序间的数据共享性能。
通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介。之前写的点赞点踩接口其实就是一个api接口。
API接口的样子:
''' -url:长得像返回数据的url链接 https://api.map.baidu.com/place/v2/search -请求方式:get、post、put、patch、delete 采用get方式请求上方接口 -请求参数:json或xml格式的key-value类型数据 ak:6E823f587c95f0148c19993539b99295 region:上海 query:肯德基 output:json 响应结果:json或xml格式的数据 -响应结果:json或xml格式的数据 '''
接口测试工具postman
''' # API接口写好,后端人员要测试,不可能在浏览器里测试 # 使用postman软件,来做接口测试 -本质就是:模拟发送http请求 # 接口测试软件有很多,postwoman # 官网下载:https://www.postman.com/downloads/ # 双击安装 '''
restful规范
restful是一个规范,面向资源架构,总共有十条规范:
1:API与用户的通信协议,总是使用HTTPS协议
2:域名
https://api.example.com 尽量将API不熟在专用域名(会存在跨域问题,不推荐使用)
https://example.org/api/ API很简单(推荐)
3:版本
https://api.example.com/v1/ 把版本号放在请求头中
4:路径,将网络上任何东西都看作资源,都使用名词表示(可复数)
127.0.0.1/get_all_book/ 旧版本
127.0.0.1/books/ (可用名词,也可以用复数)
5:method,通过请求方式来表示进行的操作(get请求,post请求,delete请求,put、patch请求)
127.0.0.1/books/ get请求:表示获取所有图书
127.0.0.1/books/1 get请求:表示获取id为1的图书
127.0.0.1/books/ post请求:表示新增一本书
127.0.0.1/books/ delete请求:表示删除一本书
127.0.0.1/books/ put/patch请求:表示修改一本书
6:过滤,通过在url上传参的形式传递搜索条件
7:状态码
1 开头:服务器正在处理
2 开头:服务器处理成功
3 开头:重定向
4 开头:客户端错误
5 开头:服务器错误
8:错误处理,应返回错误信息,error当做key
9:返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范
10:返回结果中提供链接
CBV执行流程
路由写成:url(r'books/',views.Book.as_view())。
当程序启动,第二个位置其实已经放了一个函数的内存地址了(as_view内部view这个函数)。
比如来了一个get请求,拿到第二个位置参数内存地址加括号执行(request,*args,**kwargs),其实就是view(request,*args,**kwargs)
dispatch方法内部通过请求方式(get,post),反射出要执行的方法,去执行,然后返回。
drf框架
只要用drf,以后写的都是cbv。(就是在原来Django框架的基础上多做了一些事)其实就是一个app。
安装方法:
方式一:pip3 install djangorestframework
方式二:pycharm图形化界面安装
方式三:pycharm命令行下安装(装在当前工程所用的解释器下)
drf提供的:
序列化组件、视图组件、解析器、认证组件、权限组件、频率组件、分页器、响应器、url控制器、版本控制。
APIView源码的执行流程:
比如get请求来了,执行View的as_view方法内部的view闭包函数,view闭包函数中执行了dispatch方法,
现在再执行dispatch,就已经不是View的dispatch,是APIView的dispatch方法了
序列化组件:
简单地说,序列化就是从数据库中取出数据处理后传给API(请求方);反序列化就是从API(请求方)获取数据处理后存到数据库中。
定义一个序列化类:
# 写序列化类:给book进行序列化 # from rest_framework.serializers import Serializer from rest_framework import serializers class BookSerializer(serializers.Serializer): # 要序列化的字段 有很多字段类,字段类有很多字段属性 name = serializers.CharField() # 字段类 # price = serializers.CharField() publish = serializers.CharField()
使用序列化类序列化多条数据:
class BookView(APIView): # APIView继承自django的View def get(self, request): book_list = Book.objects.all() # instance表示要序列化的数据,many=True表示序列化多条(instance是qs对象,一定要传many=True) ser = BookSerializer(instance=book_list, many=True) return Response(ser.data)
使用序列化类序列化单条数据:
class BookDetailView(APIView): def get(self, request, pk): book = Book.objects.filter(pk=pk).first() ser = BookSerializer(instance=book) return Response(ser.data)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步