DRF序列化器代码备份

urls.py

"""
URL configuration for drf project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/4.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path

from book import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/', views.BookView.as_view()),
    path('book/<int:pk>', views.BookDetailView.as_view()),
]

视图views.py

from rest_framework import serializers
from rest_framework.response import Response

from rest_framework.views import APIView

from book.models import Book


class BookSerializer(serializers.ModelSerializer):
    # 如果有部分自定义的字段,只需要照常定义,并exclude排除原来的字段即可
    asbgjasg_price = serializers.IntegerField(source='price')

    class Meta:
        # 指定类名
        model = Book
        # fields为白名单模式,指的是需要序列化的字段,__all__表示全部字段
        # 包括pk(自动生成的自增主键),但是这里的值中指的是数据库中的字段名称
        # 尽管模型上自动生成的主键的属性为pk,但是存入数据库中的名称是id。
        # 因此不想要pk的值,就排除id即可
        # 白名单模式一般直接使用all
        # fields = '__all__'
        exclude = ['id', 'price']

# 查询全部以及添加单个
class BookView(APIView):
    def get(self, request):
        booklist = Book.objects.all()
        print('booklist', booklist)
        serializer = BookSerializer(booklist, many=True)
        return Response(serializer.data)

    def post(self, request):
        print(request.data)
        serializer = BookSerializer(data=request.data)
        is_valid = serializer.is_valid()
        print('is_valid', is_valid)
        # 存放错误信息(需要先访问is_valid方法)
        print(serializer.errors)
        if not is_valid:
            return Response(serializer.errors)
        # 下面处理通过的逻辑
        serializer.save()
        return Response({'msg': '添加成功', 'status': True})


class BookDetailView(APIView):
    def get(self, request, pk):
        print('参数方法调用')
        book = Book.objects.get(pk=pk)
        serializer = BookSerializer(book)
        return Response(serializer.data)

    def put(self, request, pk):
        book = Book.objects.get(pk=pk)
        print(request.data)
        # 需要同时获取模型实例和数据
        serializer = BookSerializer(book, data=request.data)
        if serializer.is_valid():
            serializer.save()
            print('data: ', serializer.data)
            return Response({'msg': '修改成功', 'status': True})
        else:
            return Response(serializer.errors)

    def delete(self, request, pk):
        # 不涉及序列化器
        book = Book.objects.get(pk=pk)
        book.delete()
        return Response({'msg': '删除成功', 'status': True})

posted @ 2024-05-10 00:59  魂祈梦  阅读(15)  评论(0)    收藏  举报