djangorestframework 学习

发布时间 2023-06-18 18:06:31作者: NewBee_2023

创建记账 app

python manage.py startapp record

首先需要确认数据库表结构,分两张表:分类表、账单表
分类表包括:分类名称
账单表包括:消费金额、消费时间、消费用户(关联到用户表)、消费分类(关联到分类表)、消费的具体描述。
根据以上信息创建 Model

from django.db import models
from django.contrib.auth.models import User


class Catalog(models.Model):
    catalog = models.CharField(max_length=200, help_text='输入分类名称')

    def __str__(self):
        return self.catalog


class Consume(models.Model):
    price = models.DecimalField(max_digits=6, decimal_places=2, help_text='输入消费金额')
    consume_time = models.DateTimeField(help_text='消费时间')
    # 外键关联到用户
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    # 消费类型
    consume_type = models.ForeignKey('Catalog', on_delete=models.SET_NULL, null=True)
    desc = models.CharField(max_length=2000, help_text='消费具体描述')


from rest_framework import serializers


class CatalogSerializer(serializers.ModelSerializer):
    class Meta:
        model = Catalog
        fields = ('id', 'catalog')


class ConsumeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Consume
        fields = '__all__'

视图类:

# views.py

from rest_framework import viewsets
from .models import Catalog, CatalogSerializer, Consume, ConsumeSerializer


class CatalogViewSet(viewsets.ModelViewSet):
    queryset = Catalog.objects.all()
    serializer_class = CatalogSerializer

注册接口:

from django.urls import include, path
from .views import CatalogViewSet
from rest_framework import routers


router = routers.DefaultRouter()
router.register(r'catalog', CatalogViewSet)  # 注册路由到ManViewSet视图

urlpatterns = [
    path('', include(router.urls)),  # 使用router路由
]

在管理后台插入几条数据,访问接口:
image
成功!

记账功能的开发

class ConsumeViewSet(viewsets.ModelViewSet):
    queryset = Consume.objects.all()
    serializer_class = ConsumeSerializer

    # 当前用户即为这条记录所属的用户
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)