zoukankan      html  css  js  c++  java
  • DRF 01

    DRF

    • drf是Django的一个插件

    • 安装: pip install djangorestframework

    • 使用drf需要先在settings.py配置文件中注册

    接口

    概念

    • 接口就是一种url链接, 你按照相应的格式向这个url提交数据, 可以获取相应的响应结果

    • 概括来说就是四大点

    YApi接口文档

    • 接口文档就是将接口的四部分翻译成文档形式 - word/md/Yapi

    • YApi是去哪网大前端技术中心的一个开源可视化接口管理平台

    • 测试网址: http://yapi.demo.qunar.com/

    Postman接口测试

    RESTful接口规范

    • RESTful是目前最流行的API设计规范

    URL设计

    
    1.url链接一般采用https协议进行传输 (安全)
    	
    2.用api关键字标识接口url
    	https://api.baidu.com/
    
    3.在url链接中标识数据版本
    	https://api.baidu.com
    
    4.接口操作的数据即使资源, 在接口url中只体现资源的名称, 不体现操作资源的方式动词
    	https://api.baidu.com/user
    	
    5.群资源操作, 一般有额外限制条件: 排序, 分页, 限制等
    	https://api.baidu.com/v1/books/?ordering=-price&limit=3
    
    

    响应结果

    响应状态码

    1xx: 基本信息
    2xx: 成功
    3xx: 重定向
    4xx: 客户端错误
    	400: 错误请求
    	403: 请求无权限
    	404: 请求资源不存在
    5xx: 服务器异常
    			
    

    数据状态码

    一般是前后台约定的规则
    	0: 成功
    	1: 失败 - 1xx: 具体失败信息(要在接口文档中明确写出)
    	2: 无数据 - 2xx: 具体无数据信息(要在接口文档中明确写出)
    

    数据状态信息

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

    数据本身

    一般包括常量, 数组和字典等, 如有子资源(图片, 音频, 视频)则返回其url链接
    		{
        		"status": 0,
        		"msg": 'ok',
        		"results": [{
        			"name": "西游记",
        			"img": "https://api.baidu.com/media/book/xyj.png"
        		}]
    		}
    

    五大请求方式

    1.get: 获取单个或者多个资源
    
    2.post: 新增单个或者多个资源
    
    3.put: 整体修改单个或者多个资源
    
    4.patch: 局部修改单个或者多个资源
    		方式与put完全相同, 不同的是: 操作的资源如果有5个key-value键值对, put请求提供的字典必须全包含, 但
    		patch提供的字典包含的键值对0~5个都可以
    				
    5.delete: 删除单个或者多个资源
    		多删: 提供多个资源组件数据, 完成群删, 不做任何资源返回(一般我们会返回结果信息: 成功|失败)
    		单删: 不需要提供额外的数据, 完成单删, 不做任何资源返回(一般我们会返回结果信息: 成功|失败)
    

    简单实现

    class BookView(View):
        def get(self, request, *args, **kwargs):
            id = kwargs.get('id')
    
            # 单查
            if id:
                book = models.Book.objects.filter(id=id).values('name', 'price').first()
                if not book:
                    return JsonResponse({
                        'status': 0,
                        'msg': '单查 资源不存在'
                    }, json_dumps_params={'ensure_ascii': False})
                return JsonResponse({
                    'status': 0,
                    'msg': '单查 ok',
                    'result': book
                }, json_dumps_params={'ensure_ascii': False})
    
            # 群查
            else:
                book_query = models.Book.objects.values('name', 'price')
                books = list(book_query)
    
                return JsonResponse({
                    'status': 0,
                    'msg': '群查 ok',
                    'result': books,
    
                }, json_dumps_params={'ensure_ascii': False})
    
    
  • 相关阅读:
    .netcore利用DI实现级联删除
    识别手写数字增强版100%
    嗨!请查收这道有趣的面试题
    理解TCP/IP协议栈之HTTP2.0
    基于Redis的分布式锁和Redlock算法
    从生日悖论谈哈希碰撞
    Redis面试热点工程架构篇之数据同步
    Redis面试热点之底层实现篇(续)
    saltstack安装+基本命令
    25个iptables常用示例
  • 原文地址:https://www.cnblogs.com/bigb/p/12088761.html
Copyright © 2011-2022 走看看