Python Django结合DRF实现增删改查实战

陈默
陈默
发布时间:2026-10-15| 5人浏览过
原创

本文详解如何使用Python Django与Django REST Framework (DRF) 快速构建数据增删改查功能。内容涵盖App创建、数据模型定义、数据库迁移配置、路由映射、视图类编写及序列化器实现,提供完整代码示例,帮助开发者快速掌握Web API开发流程。

首先,在项目结构中创建一个新的子应用(app)。

python .\manage.py startapp app01

接下来,定义用于存储数据的数据模型(Model)。

在app01应用目录下创建modules.py文件,用于编写模型代码。

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    name=models.CharField(max_length=32)
    password=models.CharField(max_length=12)
    age=models.IntegerField()
    tel=models.IntegerField(max_length=11)

随后,配置项目的数据库连接参数。

'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库名',
        'USER': '数据库用户名',
        'PASSWORD': '密码',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }

执行数据库迁移命令,将模型同步到数据库。

python manage.py makemigrations 和 python manage.py migrate

配置URL路由,将请求路径映射到对应的视图处理函数。

from django.contrib import admin
from django.urls import path,include
from app01 import views
urlpatterns = [
    # path('admin/', admin.site.urls),
    # path('index/',views.index),
    # path('user/list/', views.user_list),
    # path('login/', views.ApiLogin.as_view()),
    # path('del/', views.ApiDel.as_view()),
    path('add/', views.addUser.as_view()),
    path('user/', views.UserList.as_view()),
    path('updateuser/', views.upDateUser.as_view()),
    path('del/', views.deluser.as_view()),
]

在views.py中编写具体的增删改查业务逻辑。

from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView
# Create your views here.
from django import views
from app01.models import UserInfo
from rest_framework.response import Response
from app01.ser import APIViewUserInfo
class addUser(APIView):
    def post(self,request):
        obj=APIViewUserInfo(data=request.data)
        if obj.is_valid():
            obj.save()
            return Response({"data":obj.data, "status" : 201,"message":"添加用户成功"})
        return Response(data=obj.errors,status=400)
class UserList(APIView):
    def get(self,request):
        obj=UserInfo.objects.all()
        ser=APIViewUserInfo(instance=obj,many=True)
        return Response(ser.data)
class upDateUser(APIView):
    def post(self,request):
        print(request.data.get('id'))
        i=request.data.get('id')
        try:
            user=UserInfo.objects.get(id=i)
        except Exception as e:
            return Response(data='不存在', status=201)
        # 创建序列化对象,并将要反序列化的数据传递给data构造参数,进而进行验证
        user.password=request.data.get('password')
        if request.data.get('name')!='':
            print(request.data.get('name')=='')
            user.name=request.data.get('name')
        user.save()
        return Response(status=400)
class deluser(APIView):
    def post(self,request):
        id=request.data.get('id')
        UserInfo.objects.filter(id=id).delete()
        return Response({"msg":'删除成功',"state":"true"})
# def index(request):
#     return HttpResponse("欢迎使用")
#
#
# def user_list(request):
#     return render(request,"user_list.html")
#
# class ApiLogin(APIView):
#     def get(self,request):
#         return HttpResponse('get')
#     def post(self,request):
#         UserInfo.objects.create(name='张三',password='123456',age=15,tel='1234567891')
#         obj=UserInfo.objects.all()
#         print(obj)
#         return HttpResponse('post')
#
# class ApiDel(APIView):
#     def post(self,request):
#         UserInfo.objects.filter(id=4).delete()
#         return HttpResponse('删除成功')

配置序列化器,处理数据的序列化和反序列化过程。

# -*- coding: utf-8 -*-
from rest_framework import serializers
from app01.models import UserInfo
class APIViewUserInfo(serializers.Serializer):
    """图书数据序列化器"""
    id = serializers.IntegerField(label='ID', read_only=True)       # 主键序列化
    # 第一:普通字段序列化
    name = serializers.CharField(label='名称', max_length=20)
    password = serializers.CharField(label='密码')
    age = serializers.IntegerField(label='年龄', required=False)
    tel = serializers.IntegerField(label='电话', required=False)
    # # 第二:一对多字段序列化
    # heroinfo_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True)
    # # 第三:自定义显示(显示多对多)
    # xxx = serializers.SerializerMethodField(read_only=True)
    class Meta:
        model = UserInfo
    # 自定义显示 多对多 字段
 # 定义创建语法:ser.save()执行,就会立刻调用create方法用来创建数据
    def create(self, validated_data):
        '''validated_data: 表单或者vue请求携带的json:{"username":"zhangsan","password":"123456"}'''
        return self.Meta.model.objects.create(**validated_data)

至此,关于Python Django结合DRF实现增删改查的快速体验介绍完毕。如需了解更多相关技术内容,建议查阅本站往期文章或继续浏览后续教程,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。