0
点赞
收藏
分享

微信扫一扫

【Django-DRF】使用md笔记 0基础到高手. 第(4)篇:使用Django-DRF进行开发

本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计REST API,通过使用Django来实现一个REST API为例,明确后端开发REST API要做的最核心工作,然后介绍Django REST framework能帮助我们简化开发REST API的工作。

完整版笔记直接地址: 请移步这里

共 5章,24 子模块,总计 1.78w 字

引入Django REST framework

在本文中,我们要大家介绍为什么学习Django REST framework,它能帮助我们做哪些事情。

我们从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计REST API,通过使用Django来实现一个REST API为例,明确后端开发REST API要做的最核心工作,然后介绍Django REST framework能帮助我们简化开发REST API的工作。

Django REST framework 简介

1. 在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的。
2. 在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增、删、改、查的实现流程基本套路化,所以这部分代码也是可以复用简化编写的:

* **增** :校验请求数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回
* **删** :判断要删除的数据是否存在 -> 执行数据库删除
* **改** :判断要修改的数据是否存在 -> 校验请求的数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回
* **查** :查询数据库 -> 将数据序列化并返回

Django REST framework 可以帮助我们简化上述两部分的代码编写,大大提高REST API的开发速度。

认识Django REST framework

drf_logo

Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具。

通常简称为DRF框架 或 REST framework。

DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。

特点

  • 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
  • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;
  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
  • 多种身份认证和权限认证方式的支持;
  • 内置了限流系统;
  • 直观的 API web 界面;
  • 可扩展性,插件丰富

DRF工程搭建

环境安装与配置

DRF需要以下依赖:

  • Python
  • Django

DRF 是以Django扩展应用的方式提供的,所以我们可以直接利用已有的Django环境而无需从新创建。(若没有Django环境,需要先创建环境安装Django)

1. 安装DRF


​ pip install djangorestframework

2. 添加rest_framework应用

我们利用在Django框架学习中创建的demo工程,在 settings.pyINSTALLED_APPS 中添加'rest_framework'。


​ INSTALLED_APPS = [ ​ ... ​ 'rest_framework', ​ ]

接下来就可以使用DRF进行开发了。

见识DRF的魅力

我们仍以在学习Django框架时使用的图书英雄为案例,使用Django REST framework快速实现图书的REST API。

1. 创建序列化器

在booktest应用中新建serializers.py用于保存该应用的序列化器。

创建一个BookInfoSerializer用于序列化与反序列化。


​ class BookInfoSerializer(serializers.ModelSerializer): ​ """图书数据序列化器""" ​ class Meta: ​ model = BookInfo ​ fields = 'all'

  • model 指明该序列化器处理的数据字段从模型类BookInfo参考生成
  • fields 指明该序列化器包含模型类中的哪些字段,'all'指明包含所有字段

2. 编写视图

在booktest应用的views.py中创建视图BookInfoViewSet,这是一个视图集合。


​ from rest_framework.viewsets import ModelViewSet ​ from .serializers import BookInfoSerializer ​ from .models import BookInfo ​

class BookInfoViewSet(ModelViewSet):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
  • queryset 指明该视图集在查询数据时使用的查询集
  • serializer_class 指明该视图在进行序列化或反序列化时使用的序列化器

3. 定义路由

在booktest应用的urls.py中定义路由信息。


​ from . import views ​ from rest_framework.routers import DefaultRouter ​

urlpatterns = [
    ...
]

router = DefaultRouter()  # 可以处理视图的路由器
router.register('books', views.BookInfoViewSet, name='books')  # 向路由器中注册视图集

urlpatterns += router.urls  # 将路由器中的所以路由信息追到到django的路由列表中

4. 运行测试

运行当前程序(与运行Django一样)


​ python manage.py runserver

在浏览器中输入网址127.0.0.1:8000,可以看到DRF提供的API Web浏览页面:

图书接口Web浏览页面

1)点击链接127.0.0.1:8000/books/ 可以访问 获 取所有数据的接口,呈现如下页面:

查询所有图书信息1

查询所有图书信息2

2)在页面底下表单部分填写图书信息,可以访问 添 加新图书的接口,保存新书:

保存新图书

点击POST后,返回如下页面信息:

保存图书返回信息

3)在浏览器中输入网址127.0.0.1:8000/books/1/,可以访问 获 取单一图书信息的接口(id为1的图书),呈现如下页面

4)在页面底部表单中填写图书信息,可以访问 修 改图书的接口

修改图书信息

点击PUT,返回如下页面信息:

修改图书返回信息

5)点击DELETE按钮,可以访问 删 除图书的接口

删除图书

返回,如下页面:

删除图书返回信息

至此,是不是发现Django REST framework很好用!

Serializer序列化器

序列化器的作用:
1. **进 行数据的校验**
2. **对 数据对象进行转换**

未完待续 下一期下一章

完整笔记请看文章开头

举报

相关推荐

0 条评论