zoukankan      html  css  js  c++  java
  • Django 之DRF删改查的API接口

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

  • 相关阅读:
    python学习笔记(29)-操作excel
    python学习笔记(28)-unittest单元测试-执行用例
    python学习笔记(27)-unittest单元测试-测试用例
    python学习笔记(26)-request模块
    python学习笔记(25)-继承
    c++ 流基本概念
    友元函数、类和运算符重载
    c++中的引用
    c++重点知识点
    指针和结构体
  • 原文地址:https://www.cnblogs.com/NGU-PX/p/14266951.html
Copyright © 2011-2022 走看看