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 无 删除单个
启动后即可访问并开始调试接口
最新评论
# 这只是一个创建远程登录并授权的语句、仅作为记录 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Fit2cloud!' WITH GRANT OPTION;
当MGR集群初始化结束后,需要开启MGR集群自启动(需要有一台节点是自动开启引导) loose-group_replication_start_on_boot = ON #设置节点是否在启动时自动启动 MGR 集群 loose-group_replication_bootstrap_group = ON #设置节点是否作为初始引导节点启动集群
密码:blog.sirliu.com
本内容密码:blog.sirliu.com 最新整理的文章在这里喔:https://blog.sirliu.com/2018/11/shell_lian_xi_ti.html