DRF 01
2024-09-05 04:14:19
DRF
drf是Django的一个插件
安装:
pip install djangorestframework
使用drf需要先在settings.py配置文件中注册
接口
概念
接口就是一种url链接, 你按照相应的格式向这个url提交数据, 可以获取相应的响应结果
概括来说就是四大点
- url链接: https://api.map.baidu.com/place/v2/search
- 请求方式: get, post, put, patch, delete
- 请求参数
- 响应结果
YApi接口文档
接口文档就是将接口的四部分翻译成文档形式 - word/md/Yapi
YApi是去哪网大前端技术中心的一个开源可视化接口管理平台
Postman接口测试
- Postman是一款免费的, 用于接口调试的可视化软件
- 下载: https://www.getpostman.com/downloads/
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})
最新文章
- EF 未应用自动迁移,因为自动迁移会导致数据丢失的解决办法
- ASP.NET Web API 2 入门
- 使用C#向Sql Sever中存取网络图片和本地图片(二进制流的形式)
- AngularJs ngCsp、ngFocus、ngBlur、ngForm
- [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)
- 编译到底做了什么(***.c ->; ***.o的过程)
- 虚拟机下CentOS找不到网卡eth0的解决方法
- Oracle Spool详解
- 图文详解ReSharper 8.1功能变化
- (Matlab)GPU计算所需的配置
- Xiangqi(简单模拟)
- spring学习(01)之IOC
- springMVC中如何访问WebContent中的资源文件
- 4gcc编译器
- nice &; renice
- 洛谷P3203 [HNOI2010] 弹飞绵羊 [LCT]
- 在Windows下将Redis注册为本地服务
- 数据库之存储过程(Stored Procedure)【未完待续】
- Dr.memory
- PHP REST架构简单设计