当前位置: 首页 > news >正文

Django系列之DRF简单使用

基于ModelViewSets的简单使用

models.py

from django.db import modelsclass AuthorDetail(models.Model):gender = models.CharField(max_length=8)birthday = models.DateField()telephone = models.BigIntegerField()addr = models.CharField(max_length=64)class Author(models.Model):name = models.CharField(max_length=32)age = models.IntegerField()ad = models.OneToOneField(AuthorDetail, on_delete=models.CASCADE, null=True)def __str__(self):return self.name

serializers.py

from rest_framework import serializersclass AuthorSerializer(serializers.ModelSerializer):class Meta:model = Authorfields = "__all__"# 检验条件extra_kwargs = {"age": {"min_value": 0, "max_value": 200}}

app01/views.py

from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSetfrom app01.models import Author
from app01.serializers import AuthorSerializerclass AuthorModelViewsets(ModelViewSet):queryset = Author.objects.all()serializer_class = AuthorSerializer@action(methods=["get"], detail=False)          # detail=False or True: True: 系统会自动在生成的路由中添加pk值def top3(self, request):top3 = self.queryset.order_by("-age")[:3]serializer = AuthorSerializer(instance=top3, many=True)return Response(serializer.data)@action(methods=["get"], detail=True)       # 如果视图逻辑中需要pk值,detail就得是Truedef detailone(self, request, pk):author_detail = Author.objects.get(pk=pk)print(author_detail)return Response({"name": author_detail.name, "age": author_detail.age})

project/urls.py

from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path("league/", include("app01.urls")),
]

app01/urls.py

from rest_framework.routers import SimpleRouterfrom app01.views import AuthorModelViewsetsurlpatterns = []router = SimpleRouter()
router.register("author", AuthorModelViewsets)urlpatterns += router.urls

使用 SimpleRouter() 可以帮我们实现五个基础的 action 方法:
{“get”: “list”, “post”: “create”, “get/id”: “retrieve”, “put”: “update”, “delete”: “`destroy”}

如果需要增加一些其他的路由视图,就需要用 action 声明了。

action声明

如果需要增加一些其他自定义视图函数,则需要使用到 action 装饰器:

from rest_framework.decorators import action@action(methods=["get"], detail=False)
def top3(self, request):...@action(methods=["get"], detail=True)
def detailone(self, request, pk):...

detail 参数: True or False,如果视图中需要用到pk值,那就让 detail=True
True:系统会自动在生成的路由中添加pk值,比如
在这里插入图片描述
False:不会添加pk值到路由中。

http://www.lryc.cn/news/106298.html

相关文章:

  • 新闻标题文本分类任务
  • 自己实现MyBatis 底层机制--抽丝剥茧(上)
  • Django后端执行成功或失败状态码
  • Prometheus中的关键设计
  • Centos7 安装yum
  • 无涯教程-Lua - 简介
  • 【第一阶段】kotlin语言引用数据类型
  • BUU [网鼎杯 2020 朱雀组]phpweb
  • 使用WebMvcConfigurationSupport后导致原来返回的json数据变为了xml的解决方法
  • 如何判断一个枚举值是否存在(Check if an Enum Value Exists in Java)
  • 网工内推 | 网络安全工程师,最高15K,有高温补贴
  • Android—ADB命令
  • 音视频知识:MPEG-4、H264、MP4、AAC之间的关系
  • 智能门锁的无线通讯协议有哪些?主要特点是什么?
  • 机器学习——异常检测
  • 小研究 - 一种复杂微服务系统异常行为分析与定位算法(一)
  • 代码版本管理工具 git
  • 【计算机视觉中的 GAN 】如何稳定GAN训练(3)
  • 一文讲清楚地图地理坐标系
  • 助力青少年科技创新人才培养,猿辅导投资1亿元设立新基金
  • 代码随想录算法训练营之JAVA|第十八天| 235. 二叉搜索树的最近公共祖先
  • IO进程线程第五天(8.2)进程函数+XMind(守护进程(幽灵进程),输出一个时钟,终端输入quit时退出时钟)
  • 物联网远程智能控制设备——开关量/正反转百分比控制
  • echarts图表基本使用
  • 排序进行曲-v1.0
  • 算法入门篇——用位运算解决一些问题
  • 腾讯云-宝塔添加MySQL数据库
  • 【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序
  • Mysql删除重复数据通用SQL
  • “快速入门Spring Boot:从零开始构建Web应用程序“