描述: 通过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接口处理数据。