学习是一个逐步发现自己无知的过程!

Django DRF框架

DRF框架简介

Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具。
通常简称为DRF框架 或 REST framework。
DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。

在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的。
在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增、删、改、查的实现流程基本套路化,所以这部分代码也是可以复用简化编写的:
增:校验请求数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回
删:判断要删除的数据是否存在 -> 执行数据库删除
改:判断要修改的数据是否存在 -> 校验请求的数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回
查:查询数据库 -> 将数据序列化并返回
Django REST framework可以帮助我们简化上述两部分的代码编写,大大提高REST API的开发速度。

DRF特点

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

环境安装与配置

安装DRF,前提是需要安装Django

pip install djangorestframework

添加rest_framework应用
settings.py的INSTALLED_APPS中引入rest_framework

INSTALLED_APPS = [
    ...
    'rest_framework',
]

创建模型操作的类

from django.db import models

# Create your models here.

# 这里的Host就是表名
class Host(models.Model):
    # 这分别就是表中的几个字段
    sid = models.CharField(max_length=64, verbose_name='SID')
    hostname = models.CharField(max_length=50, verbose_name='HOSTNAME')
    ip = models.CharField(max_length=128, verbose_name='IP')
    mac = models.CharField(max_length=50, verbose_name='MAC')

    class Meta:
        # 这里是为了方便阅读,类似于备注
        verbose_name = "主机"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.sid

创建完成后需要进行数据库迁移

# 在终端窗口执行
python3 manage.py makemigrations cmdb 
python3 manage.py migrate cmdb 

------------------ 不同的执行方法

# 在Django项目终端中执行
makemigrations
migrate

创建序列化类

修改 serializers.py 添加字字段

model 指明该序列化器处理的数据字段
fields 指明该序列化器包含模型类中的哪些字段,'all’指明包含所有字段

from rest_framework import serializers
# 序列化器基类(有两个)
# serializers.Serializer
# serializers.ModelSerializer

from .models import Host

class HostModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Host  # 指定模块类型
        # fields = "__all__"     # 返回给客户端全部字段
        fields = [
            "sid",
            "hostname",
            "ip",
            "mac"
        ]

ModelSerializer与常规的Serializer相同,但提供了:

基于模型类自动生成一系列字段
基于模型类自动为Serializer 生成 validators,比如unique_together
包含默认的create() 和 update()的实现

编写视图

编辑视图文件 views.py

from rest_framework.viewsets import ModelViewSet
from .models import Host
from .serializers import HostModelSerializer
from rest_framework.viewsets import ModelViewSet

from .models import Host
from .serializers import HostModelSerializer

# Create your views here.
class HostModelViewSet(ModelViewSet):
    queryset = Host.objects.all()
    serializer_class = HostModelSerializer

视图简介

"""
视图集
特点:
    1,可以将一组相关的操作, 放在一个类中进行完成(比如获取所有和获取单个)
    2,不提供get,post方法, 使用retrieve, create方法来替代
    3,可以将标准的请求方式(get,post,put,delete), 和mixin中的方法做映射

常见的视图集:
类名称                 父类                                  作用
ViewSet               APIView                         可以做路由映射
                         ViewSetMixin

GenericViewSet        GenericAPIView         可以做路由映射,可以使用三个属性,三个方法
                              ViewSetMixin

ModelViewSet          GenericAPIView            所有的增删改查功能,可以使用三个属性,三个方法
                            5个mixin类

ReadOnlyModelViewSet  GenericAPIView        获取单个,所有数据,可以使用三个属性,三个方法
                                   RetrieveModelMixin
                                    ListModelMixin

"""

定义路由

引入路由信息urls.py

"""djangoProject1 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from rest_framework.routers import DefaultRouter

from cmdb_host import views

urlpatterns = [
    path('admin/', admin.site.urls),
]

router = DefaultRouter()  # 处理视图中的路由 
router.register("Host", viewset=views.HostModelViewSet, basename="Host")  # 注册视图到路由
urlpatterns += router.urls  # 将路由中的路由信息追加到Django路由表中

路由与使用方法

 [
                  # 127.0.0.1:8000
     <URLPattern '^teacher/$' [name='teacher-list']>,、
     <URLPattern '^teacher\.(?P<format>[a-z0-9]+)/?$' [name='teacher-list']>,

     <URLPattern '^teacher/(?P<pk>[^/.]+)/$' [name='teacher-detail']>, 
     <URLPattern '^teacher/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$' [name='teacher-detail']>, 
     # 跟路由
     <URLPattern '^$' [name='api-root']>,
     <URLPattern '^\.(?P<format>[a-z0-9]+)/?$' [name='api-root']>

 ]

          接口地址                  请求方式       返回数据            描述
 http://127.0.0.1:8000/Host/        get         [{},{},...]       获取所有
 http://127.0.0.1:8000/Host/        post        {}                新增
 http://127.0.0.1:8000/Host/id      get         {}                获取单个
 http://127.0.0.1:8000/Host/id      put         {}                修改某个
 http://127.0.0.1:8000/Host/id      delete      无                删除单个

启动后即可访问并开始调试接口

file

赞(0)
未经允许不得转载:劉大帥 » Django DRF框架

你的评论可能会一针见血! 抢沙发

登录

找回密码

注册