DRF方法 的 使用

本文探讨了在Django Rest Framework中,何时及如何重写ModelViewSet方法,包括create、validate、update、get_queryset和get_serializer_class,以满足特定业务需求和API规范。

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

什么时候继承ModelVIewSet

当一个功能需要增删改查的时候 ,就需要继承modelVIewSet

create

因为配置分页器类可以用大数据查看数据的趋势,从而进行分析,在添加用户的时候重写了create方法 原因就是,之前的create不满足需求,创建用户的时候会明文显示,基于此所以要重写。是因为要按照api接口返回的要求返回 继承的不满足情况 所以重写

为什么 配置分页器

因为如果数据太庞大,就会造成数据冗余,通过后台查看就极大的不方便,为了方便查看 所以要用到分页器,也就要去配置分页器类从而实现分页器,在settings里配置分页器类的信息路由然后写一个分页器,然后按照api规格去实现,按照定的方法去返回数据。

validate

是验证sku信息是否存在去重写的,
因为获取到了sku的信息,但是不能确定是否属于真实的所以牵扯到外键关联的主键表,通过主键表spu来验证sku表的真实性

update

是因为提交修改信息提交不了,继承的ModelSerializer满足不了

get_queryset

是因为要满足前端返回参数kwages 和 继承list 视图集返回的参数 并存 所以重写了。满足搜索和默认列表 。

get_serializer_class

是因为继承的类中的操作和当前的需求不符合, 要么按照订单详情返回要不按照订单序列化器返回 ,如果不重写 只会返回一个,返回效果没有保障, 所以重写了

### 使用 Django REST framework (DRF) 开发 Web API #### 创建项目并安装 DRF 为了使用 DRF 构建 Web API,首先需要有一个 Django 项目环境。如果尚未创建,则可以通过以下命令初始化一个新的 Django 项目: ```bash django-admin startproject myproject cd myproject ``` 接着,在虚拟环境中安装 DRF 库[^1]。 ```bash pip install djangorestframework ``` 完成安装后,需将 `rest_framework` 添加至项目的 `INSTALLED_APPS` 设置列表中: ```python # settings.py INSTALLED_APPS = [ ... 'rest_framework', ] ``` #### 设计模型与数据库迁移 假设要构建一个简单的图书管理系统的 API 接口,先设计相应的数据表结构。可以在应用内定义如下模型类表示书籍实体: ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) published_date = models.DateField() def __str__(self): return self.title ``` 之后执行 makemigrations 和 migrate 命令使上述更改生效于数据库层面[^3]。 ```bash python manage.py makemigrations python manage.py migrate ``` #### 编写序列化器 为了让客户端能够方便地操作这些资源对象,还需要编写对应的序列化器来转换 Python 对象为 JSON 或 XML 等格式的数据流。这里以 `BookSerializer`为例说明其基本形式: ```python from rest_framework import serializers from .models import Book class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = ['id', 'title', 'author', 'published_date'] ``` 此部分实现了对书籍信息的序列化/反序列化逻辑,便于后续通过 HTTP 请求传递给前端或其他服务端程序解析使用[^2]。 #### 实现视图函数或类 接下来就是实现具体的业务逻辑——即所谓的“控制器”。对于较为复杂的场景推荐采用基于类的方式(`APIView`);而对于简单的情况则可以直接利用函数式的装饰器方法(@api_view)[^4]。 以下是两种不同风格下的 GET 方法示例代码片段: - 函数式视图(@api_view) ```python from rest_framework.decorators import api_view from rest_framework.response import Response from .serializers import BookSerializer from .models import Book @api_view(['GET']) def book_list(request): books = Book.objects.all() serializer = BookSerializer(books, many=True) return Response(serializer.data) ``` - 类视图(APIView) ```python from rest_framework.views import APIView from rest_framework.response import Response from .serializers import BookSerializer from .models import Book class BookListView(APIView): def get(self, request): books = Book.objects.all() serializer = BookSerializer(books, many=True) return Response(serializer.data) ``` 这两种方式都可以很好地满足需求,具体选择取决于个人偏好以及实际应用场景的要求。 #### 配置路由映射关系 最后一步便是告诉服务器当收到特定路径下带有指定动作类型的请求时应该调用哪个处理器去处理该请求。这通常是在 urls.py 文件里完成的工作。例如: ```python from django.urls import path from .views import book_list, BookListView urlpatterns = [ # 函数式视图URL模式 path('books/', book_list), # 类视图URL模式 path('book-list-class/', BookListView.as_view()), ] ``` 以上步骤完成后便已经成功搭建起了一个简易版的支持CRUD操作的基础RESTful API接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值