拖了很久,终于用 Django REST Framework 写了个小 Demo.
1. Django REST Framework
Django REST Framework 是一个用来构造 Web API 的、强大而灵活的工具包。
最早认识这个框架是在我翻译的《5 个最受人喜爱的开源 Django 包》中,而真正接触它的时候已经是在五个月之后。那个时候在扇贝实习,第一次体会到了这个框架的简单易用。但那个时候也仅仅是做码农堆代码,并没有对这个框架产生特别深的了解。
前两天写了一个小 Demo,尝试着用比较少的代码实现对某个模型的增删改查操作,今天简单把实现过程记录一下。完整的代码在这里。
2. 一点准备工作
先安装依赖(推荐使用 virtualenv,虽然我从来不用🌚):pip install Django djangorestframework
.
然后创建工程,创建 app.
1 | django-admin startproject drf_demo |
简单写一个 model:
1 | # demo/models.py |
迁移数据库:
1 | ./manage.py makemigrations |
在项目设置中添加 APP,顺便把 DRF 也添加进去:
1 | # drf_demo/settings.py |
在 root URL conf 中添加 APP 的 URL:
1 | # drf_femo/urls.py |
3. 开始动手写 API
如果在 Django 中写一个页面,你需要:
- 在
urls.py
中注册 view; - 在
views.py
中编写 view; - 在
templates
文件夹中编写模板。
相对地,如果使用 DRF 创建一组 API,你需要:
- 在
urls.py
中定义并注册 router; - 在
views.py
中定义 ViewSet; - 在
serializers.py
中定义 serializer.
3.1 创建 serializer
serializer 是什么?
简单而言,serializer 就是一种根据配置,用来把数据在 model instance 及 raw data 之间转换的对象。
比如:我们可以针对刚刚定义的 model Data
来创建一个 serializer:
1 | # demo/serializers.py |
然后,我们就可以通过这个 serializer 将数据在 Data
对象及 JSON
数据之间转换:
1 | from demo.serializers import Data, DataSerializer |
3.2 创建 ViewSet
非常简单,在 views.py
中定义一个 ViewSet 类,标明对应的 model 以及 serializer 即可:
1 | # demo/views.py |
3.3 定义、配置并注册 router
1 | # demo/urls.py |
4. 大功告成!
启动服务器,访问 /data/
,你就会看到 DRF 精美的调试界面,真是感动😭
按照 RESTful API 规范,在列表界面,你可以通过 POST 表单来创建新对象:
在详情界面(/data/1/
),你可以通过 PUT 表单修改对象,或通过 DELETE 按钮来删除对象:
当然,如果你乐意,使用 CURL 来调试也是可以的,服务器会给你返回 JSON 而不是 HTML:
1 | $ curl -XPUT --data "content=edit" http://localhost:8000/data/1/ |
5. 等等…别忘了写测试!
DRF 提供了一系列工具来协助 RESTful API 测试,比如 rest_framework.test.APIClient
. APIClient
在发送请求时会根据配置自动设定 Content-Type
, 而不是用 Django 自带 djanto.test.Client
的 application/octet-stream
,方便了 API 测试。
测试代码不在这里贴出(有些无趣),感兴趣的同学可以戳戳戳这里。
教程结束。
这两天我还会继续看 DRF,后面还会继续更新相关内容。
更新…
然而并没有更新。
我看完了 DRF 的 tutorial,也在某个项目里碰到了坑/难用的地方,不过这些都没有太多可写的地方,所以就算了吧,遇到问题翻文档就好,DRF 的文档写的还是挺不错的。