1223 drf引入以及restful规范

前后台的数据交互

前台安装axios插件,进行与后台的数据交互

  • 安装axios,并在main.js中设置
  • params传递拼接参数
  • data携带数据包参数
  • headers中发送头部信息,但是必须使用authorization才能携带
<script>
    export default {
        name: 'home',
        components: {
        },
        created(){
            this.$axios({
                url:'http://127.0.0.1:8000/test/',
                method:'get',
                // 拼接参数
                params:{
                    a:1
                },
                // 数据包参数
                data:{
                    x:10
                },
                headers:{
                // 前台的认证信息携带必须由authorization携带
                    authorization:'abc.def11111111111'
                }
            }).then(response => {
                console.log('成功',response.data)
            }).catch(error => {
                console.log('shibai',error.response.data)
            })
        }
    }
</script>

后台进行接受参数

  • 必须设置cors
  • headers信息使用META中HTTP_AUTHORIZATION接收
def test(request):
    print(request.method)
    print(request.GET)   # 获取拼接参数
    print(request.body)     # 获取数据包参数
    # 获取前端的headers信息 必需在META中HTTP_AUTHORIZATION接收
    print(request.META.get('HTTP_AUTHORIZATION'))
    return JsonResponse('ok',safe=False)

自定义请求头数据META

在django中settings中设置
前端发送的请求头数据,都会在META中存放,包括自定义的请求头数据
后台获取: request.META.get('HTTP_参数名全大写')
CORS_ALLOW_HEADERS = [
    "accept",
    "accept-encoding",
    "authorization",
    "content-type",
    "dnt",
    "origin",
    "user-agent",
    "x-csrftoken",
    "x-requested-with",
    # 自定义的请求头接受数据
    "token",
    "owen",
]

drf

知识点概括

全称: Django-restframework

## 1.接口

* 接口的概念
* 数据接口文档
* 接口规范(restful)
* Postman接口测试工具

## 2.drf请求周期

## 3.drf的基础组件

* 请求 
* 响应 
* 渲染 
* 解析 
* 异常

## 4.drf的序列化(核心)

* 序列化
* 模型序列化
* 群操作序列化

## 5.drf的视图家族

* 视图类(常用)
* 视图工具类
* 工具视图类(常用)
* 视图集

## 6.drf的三大认证(核心)

* 认证
* 权限
* 频率

## 7.drf的过滤

* 筛选
* 搜索
* 排序
* 分页
* 区间

1. 框架安装

  • drf是Django的框架,所以要提前安装Django
  • 安装命令: pip install djangorestframework
  • 使用drf时,要在settings中注册

2. 接口

2.1 什么是接口

规定了提交请求参数的请求方式,访问其可以获取响应的反馈数据的url链接

四部分:
    url链接 + 请求方式 + 请求参数 + 响应数据
    
    小猿取经https://www.cnblogs.com/xiaoyuanqujing/articles/11869745.html
    
返回网页的叫网址,返回数据的叫做接口

2.2 接口文档

编写接口文档,使用yapi

详情见小猿取经

2.3 接口工具的使用

将接口使用postman进行测试

postman网址

6E823f587c95f0148c19993539b99295

img

2.4 restful接口规范

1. url链接

  • 通常采用https协议

    接口都是操作前后台数据的,所以需要保证数据的安全性 
  • 使用api关键字标识接口url

    接口用来操作数据,与网址(操作页面)有区别,所以用特定的关键字表示接口
      - https://api.baidu.com
      - https://www.baidu.com/api
    
  • 通常使用资源的复数形式,不要出现操作资源的动词

    接口操作的数据称之为`资源`,在url中只体现 `资源名称(名词)`,不体现`操作资源的方式(动词)`
    
    常规资源接口
      - https://api.baidu.com/books/
      - https://api.baidu.com/books/(pk)/
    
    非常规接口
      - 和某资源不是特别密切或是不止一种资源
      - https://api.baidu.com/login/
      - https://api.baidu.com/place/search
    
  • 在url链接中标识数据版本

    如果一个资源存在多版本结果,在url链接中要用特定的符号来兼容多版本共存
    
    v1|v2
      - https://api.baidu.com/v1/books/
      - https://api.baidu.com/v1/books/   
    
  • 群资源操作,一般还有额外的限制条件,如排序,限制调试,分页等等

    ?限制条件
      - https://api.baidu.com/v1/books/?ordering=-price&limit=3
      按照价格降序,并且只显示3本
    

2. 五大请求方式

  • get: 获取单个或者多个资源

    群查,返回多个结果对象
      - https://api.baidu.com/books/
    单查,返回单个结果对象
      - https://api.baidu.com/books/(pk)/
    
  • post: 新增单个或多个资源

    - https://api.baidu.com/books/
      单增,提交单个数据字典,完成单增,返回单个结果对象
      群增,提供多个数据字典的数组,完成群增,返回多个结果对象
    
    
  • put :整体修改单个或多个资源

    - https://api.baidu.com/books/
        整体修改多个,提供多个数据字典的数组(数据字典中要包含主键),完成群改,返回多个结果对象
    
    - https://api.baidu.com/books/(pk)/
      整体修改单个,提供单个数据字典(主键在url中体现),完成单改,返回单个结果对象
    
  • patch : 局部修改单个或多个资源

    方式与put完全相同,不同的是:
      操作的资源如果有5个key-value键值对,put请求提供的字典必须全包含,但是patch提供的字典包含的键值对0~5个都可以
    
  • delete :删除单个或多个资源

    - https://api.baidu.com/books/
      多删,提供多个资源主键数据,完成群删,不做任何资源返回(但一般我们会返回结果信息:成功|失败)
    
    - https://api.baidu.com/books/(pk)/
      单删,不需要提供额外数据,完成单删除,不做任何资源返回(但一般我们会返回结果信息:成功|失败)
    

3. 响应结果

  • 网络状态码:

    网络状态信息和网络状态码捆绑出现,不要额外设置
    
    1xx:基本信息
    2xx: 成功  
      -200 基本  
      -201 新增成功
    3xx:重定向
    4xx: 客户端错误
      - 400 错误请求
      - 403 请求无权限
      - 404 请求资源不存在
    5xx: 服务端错误
      - 500 服务器错误
    
  • 数据状态码(一般都是前后台约定规则)

    0: 成功
    1: 失败
      1xx: 具体失败信息(要在接口文档中明确写出)
    2: 无数据
      2xx: 具体无数据信息(要在接口文档中明确写出)
    
  • 数据状态信息

    一般不仅仅是对数据状态码的解释,更多的是对结果的描述,给前台开发者阅读的
    
  • 数据结果

    常量数组字典,如果有子资源(图片,音频,视频),返回资源的url连接
    
    {
        'status':0,
        'msg':'ok',
        'results':[{
            'name':'西游记,
            'img':'https://api.baidu.com/book/xyj.png'
        }]  
    }
    

debug的使用

img

views.py

查询数据的方式

# 一个视图类可以包含常规五个请求方法
# 五个请求方法处理是个资源操作的逻辑
class BookView(View):
    # 单查数据
    def _single_get(self,pk):
        book_dic = models.Book.objects.filter(pk=pk).values('name','price').first()
        if  not book_dic:
            return JsonResponse({
                'static': 1,
                'msg': '单查资源不存在',
            })
        return JsonResponse({
            'static':0,
            'msg':'单查ok',
            'results':book_dic
        })
    # 群查数据
    def _many_get(self):
        book_query = models.Book.objects.values('name','price')
        book_list = list(book_query)
        return JsonResponse({
            'static':0,
            'msg':'群差ok',
            'results':book_list
        })

    # 查询数据
    def get(self,request,*args,**kwargs):
        pk = kwargs.get('pk')
        if pk:
            return self._single_get(pk)
        else:
            return self._many_get()

猜你喜欢

转载自www.cnblogs.com/fwzzz/p/12089067.html