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)

 

posted @   *sunflower*  阅读(77)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示