描述: 通过DRF完成删改查三个小功能
(1)操作主要针对DRF的get,put, delete请求进行API操作
(2)POST操作可以查询《Django 之DRF操作》
1. Django框架整体截图

2. 连接数据库及model
【数据库连接】
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'NAME':'drfdb01',
'USER': 'root', # 连接数据库的用户名
'PASSWORD': 'REDHAT', # 连接数据库的密码
'HOST': '127.0.0.1', # IP地址
'POST': 3306, # 端口号
}
}
【model】
from django.db import models
# Create your models here.
class Student(models.Model):
# 模型字段
name = models.CharField(max_length=100,verbose_name="姓名")
sex = models.BooleanField(default=1,verbose_name="性别")
age = models.IntegerField(verbose_name="年龄")
class_null = models.CharField(max_length=5,verbose_name="班级编号")
description = models.TextField(max_length=1000,verbose_name="个性签名")
## 元类Meta,定义类的元素属性
class Meta:
## 自定义表明
db_table="tb_student"
## 自定义表的中文名(单数)
verbose_name = "学生"
## 自定义表的中文名(复数)
verbose_name_plural = "学生"
3. 定义url
from django.contrib import admin
from django.urls import path,re_path
from app1 import views
urlpatterns = [
path('index/', views.StudentView.as_view()),
re_path('^index/(d+)/$', views.StudentDetailViews.as_view())
]
4. 定义视图
【views视图定义序列化器】
from app1.models import Student ## 导入要进行测试的表
from rest_framework import serializers
from rest_framework.response import Response
from rest_framework.views import APIView
# Create your views here.
class StudentSerializer(serializers.Serializer): ## 自定义序列化器
def validate_name(self,value):
if value == "abc":
raise serializers.ValidationError("不让起这个名字")
return value
def validate(self, attrs):
name = attrs["name"]
class_null = attrs["class_null"]
if len(name) > len(class_null):
raise serializers.ValidationError("名字太长了")
return attrs
name = serializers.CharField(max_length=100)
sex = serializers.BooleanField(default=1)
age = serializers.IntegerField()
class_null = serializers.CharField(max_length=5)
description = serializers.CharField(max_length=1000,required=False) # required=False 非必须字段,允许为空
【views视图定义get,put,delete方法】
class StudentDetailViews(APIView):
def get(self,request,pk):
# 如果只是单独的模型类对象,可以直接序列化,如果是queryset必须加上many=True
data = Student.objects.filter(pk=pk)
print(data)
ss = StudentSerializer(instance=data,many=True)
return Response(ss.data)
def put(self,request,pk):
ss = StudentSerializer(data=request.data)
if ss.is_valid():
data = Student.objects.filter(pk=pk)
data.update(**ss.validated_data)
# 对修改成功的数据进行序列化返回给请求的客户端
# 重新搜索当前数据,用于验证
data1 = Student.objects.filter(pk=pk)
ss2 = StudentSerializer(instance=data1,many=True)
return Response(ss2.data)
else:
return Response(ss.errors)
def delete(self,request,pk):
data = Student.objects.filter(pk=pk)
res = data.delete()
dic = {"stauts":"删除成功"} if res[0] else {"status":"删除失败"}
return Response(dic)
5. 测试可用性
(1)GET方法:查询数据库第一条数据数据,正常返回数据

(2)PUT方法:修改第四条数据
【修改数据】
{
"name": "kyl2",
"sex": 1,
"age": 8,
"class_null": "tian"
}

【查询数据库是否修改成功】

(3)delete方法:删除第四条数据,返回删除成功

通过以上可以完成删改查3个小功能API接口处理数据。