使用Django REST framework构建包含父表和两个子表的API——从零基础到实战的详细步骤


——从零基础到实战的详细步骤)

目的:后端实现一个父表及两个子表的增删改查
适用人群:具有Python基础,但对开发比较小白的。我自己是具有人工智能算法开发和调试基础,但没接触过应用前后端的开发。本文偏实现逻辑步骤,但具体代码因为篇幅限制,只贴出了一部分

最终效果图:

查询数据表
get命令

增加数据:
增加功能示例
篇幅限制,不贴改删的效果图了。

django rest framework是什么

Django REST framework(DRF)是一个建立在Django之上的强大且灵活的工具包,用于构建Web API。它遵循REST(Representational State Transfer)设计风格,允许你以最小的网络开销构建可扩展的、可维护的API。
我的理解它就是一个写网页接口的工具

基于django的开发步骤

1、首先创建django项目和应用

2、注册应用(给应用备案)

3、写模型(类似于数据结构格式化,后续只要输入相应格式的数据即可)

4、创建数据库

5、序列化(指定将输入/输出的数据转换成想要的格式)

6、视图(定义对数据的操作,包括post/get等)

7、路由(注册访问路径)

步骤 1: 创建Django项目和应用

首先,确保你已经安装了Django和Django REST framework。如果还没有安装,可以使用pip进行安装:

pip install django djangorestframework

然后,创建一个新的Django项目和一个应用:(一个django项目下可以有很多个应用)

django-admin startproject 项目名 
cd 项目名
python manage.py startapp 应用名

步骤 2: 注册应用

settings.py中就是项目的一些设置,需要将应用添加到已安装APP中:
项目名/settings.py中,添加应用名应用到INSTALLED_APPS中:(相当于对应用登记备案)

INSTALLED_APPS = [
    ...
    'rest_framework',
    '应用名',
]

步骤 3: 定义模型

后端主要处理数据,所以需要对数据进行格式化,(即规定一个表格有哪些属性,比如名字,身份证号等)。本文需要一个父表联两个子表,故需设置一个主键(唯一标识符:primary_key=True),需要将两个子表与父表通过外键进行级联。
应用名/models.py中定义数据模型:

from django.db import models

class Parent(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)
    is_delete = models.IntegerField(default=0, blank=False, null=False)
    def __str__(self):
        return self.name
        
class ChildA(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE, related_name='child_a_set')
    detail_a = models.CharField(max_length=100)

    def __str__(self):
        return self.detail_a

class ChildB(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE, related_name='child_b_set')
    detail_b = models.CharField(max_length=100)

    def __str__(self):
        return self.detail_b

步骤 4: 创建数据库

然后运行迁移来创建数据库表:(感觉是根据数据结构生成excel表,首行即为属性那种意思)

python manage.py makemigrations
python manage.py migrate

步骤 5: 创建序列化器

感觉序列化器就是对输入输出数据做出一定的标准化,输出JSON格式/对输入JSON数据进行实例化,其中create函数和update函数涉及到保存数据和更新数据时的操作。

本任务中需要注意两个表的嵌套及新建和更新数据时函数的逻辑
应用名/serializers.py中创建数据的序列化器:

from rest_framework import serializers
from .models import *

class ChildASerializer(serializers.ModelSerializer):
    class Meta:
        model = ChildA
        fields = ('id', 'detail_a')
        # fields = '__all__'  # 序列化所有字段

class ChildBSerializer(serializers.ModelSerializer):
    class Meta:
        model = ChildB
        fields = ('id', 'detail_b')
        # fields = '__all__'  # 序列化所有字段

class ParentSerializer(serializers.ModelSerializer):
    child_a_set = ChildASerializer(many=True, read_only=False)

    child_b_set = ChildBSerializer(many=True, read_only=False)

    def create(self, validated_data):

        #对数据做格式化读取
	    child_a_data = validated_data.pop('child_a_set', [])
        child_b_data = validated_data.pop('child_b_set', [])

        parent = Parent.objects.create(**validated_data)

        for child_a_item in child_a_data:
            ChildA.objects.create(parent=parent, **child_a_item)

        for child_b_item in child_b_data:
            ChildB.objects.create(parent=parent, **child_b_item)
        return parent


    def update(self, instance, validated_data):


        #对数据做格式化读取

        return instance

    class Meta:
        model = Parent
        fields = ('id', 'name', 'child_a_set', 'child_b_set')  # 根据实际字段调整        

步骤 6: 编写视图集

对数据进行增删改查等操作时需要自定义操作的函数
应用名/views.py中,使用视图集来定义API的逻辑:

class BaseView(APIView):
        def get(self, request, *args, **kwargs):
        pk = kwargs.get('pk', None)
        if pk:
        
             try:
                data_list = Parent.objects.get(id=pk, is_delete=0)
                ser = ParentSerializer(instance=data_list)
    # 这里可以添加额外的视图方法,如自定义的action等

步骤 7: 配置URL路由

感觉就是定义网页访问路径
应用名/urls.py中设置应用的URL模式(如果文件不存在,请创建它):

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import 视图.py



urlpatterns = [
    path('',BaseView.as_view(), name='mytest1'),
]

然后,在项目名/urls.py中包含应用的URL:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [

    path('api/rule', BaseView.as_view(), name='mytest2'),
    path('api/rule/<int:pk>', BaseView.as_view(), name='mytest3'),
]

步骤 8: 运行项目

现在,可以运行Django项目了:

python manage.py runserver

现在,你可以通过访问http://127.0.0.1:8000/api/rule/来查看数据列表,或者通过curl等命令使用POST请求来创建新数据,我使用的是postman来发送curl命令。

总结

使用使用Django REST framework构建包含父表和子表的API,其实感觉主要就两个部分,一个部分是django rest framework,这个教程网上有很多;还有一个就是实现包含父表和两个子表的数据模型构建,这个可能麻烦一些。
欢迎各位探讨,有不足之处请及时指出,本人将会考虑修改。

本人承接各种计算机项目,欢迎联系。私信即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值