drf:视图

本文详细介绍了Django Rest Framework(DRF)中的视图概念,从APIview到GenericApiView,再到Mixin和三级视图的使用。通过示例代码展示了如何操作数据库中的书籍和作者数据,简化接口的实现。最后,讲解了视图集ModelViewSet的运用,解决了在一个类中同时处理多个HTTP方法的问题,并提供了相应的测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、GenericApiView

django-rest-framework官方文档地址:https://www.django-rest-framework.org/

1、APIview(一级视图)

为了方便测试,我们先定义两张表,一张为书籍表,一张为作者表,书籍和作者通过id来关联

我们先来看一段基本的APIview代码:

序列化器:

from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from .models import BookMessage,Author

class AuthorSerializer(ModelSerializer):
	class Meta:
		model = Author
		fields = "__all__"
class BookSerializer(ModelSerializer):
	# author = serializers.StringRelatedField(read_only=True)
	author = serializers.StringRelatedField(read_only=True)
	class Meta:
		model = BookMessage
		fields = ["title","author","price","date"]
		extra_kwargs = {
   
   
			"date":{
   
   "write_only":True},
		}

	def create(self, validated_data):
		aid = self.context['id']
		validated_data["author_id"] = aid
		print(validated_data)
		data = BookMessage.objects.create(**validated_data)
		return data

	def update(self, instance, validated_data):
		aid = self.context["id"]
		validated_data["author_id"] = aid
		instance.title = validated_data.get("title")
		instance.price = validated_data.get("price")
		instance.date = validated_data.get("date")
		instance.author_id = aid
		instance.save()
		return instance

为了实现取数据时显示作者名称,数据库写入数据时以id形式写入,故序列化器中重写了post及put方式中的save方法。

views.py

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from .models import BookMessage
from rest_framework import status
from .serializer import BookSerializer

# Create your views here.

class BookOperation(APIView):
	def get(self,
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值