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.mzph.cn/news/18679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA项目设计:数字时钟

项目要求: 设计一个数字时钟,数码管前两位显示小时,数码管中间两位显示分钟,数码管后面两位显示秒。 项目设计: 系统框架图: 计数模块时序图: 代码实现: 计数模块: /…

AndroidStudio查看AOSP的两种方法

作者:利维亚的杰洛特 本篇文章主要分享一些自己平时工作中使用AndroidStudio查看aosp的方法,同时抛砖引玉,希望知道其它便利有效的查看调试方式技巧的大佬们能够不吝赐教,大家互相分享,共同进步。 如果直接用AndroidS…

解决一个Sqoop抽数慢的问题,yarn的ATSv2嵌入式HBASE崩溃引起

新搭建的一个Hadoop环境,用Sqoop批量抽数的时候发现特别慢,我们正常情况下是一个表一分钟左右,批量抽十几个表,也就是10分钟的样子,结果发现用了2个小时: 查看yarn日志 发现有如下情况: 主要有两…

【iOS】GCD深入学习

关于GCD和队列的简单介绍请看:【iOS】GCD学习 本篇主要介绍GCD中的方法。 栅栏方法:dispatch_barrier_async 我们有时候需要异步执行两组操作,而且第一组操作执行完之后,才能开始执行第二组操作,当然操作组里也可以包含一个或者…

HTTP——一、了解Web及网络基础

HTTP 一、使用HTTP协议访问Web二、HTTP的诞生1、为知识共享而规划Web2、Web成长时代3、驻足不前的HTTP 三、网络基础TCP/IP1、TCP/IP协议族2、TCP/IP的分层管理3、TCP/IP 通信传输流 四、与HTTP关系密切的协议:IP、TCP和DNS1、负责传输的 IP 协议2、确保可靠性的TCP…

Gartner:2022年全球IaaS公有云服务市场增长30%,首次突破1000亿美元

根据Gartner的统计结果,2022年全球基础设施即服务(IaaS)市场从2021年的928亿美元增长到1203亿美元,同比增长29.7%。亚马逊在2022年继续排在IaaS市场的第一名,其次是微软、阿里巴巴、谷歌和华为。 最新消息,…

制砖机系统比例控制阀放大器

制砖机系统是一种生产砖块的机器设备系统。该系统由多个部分组成,包括压力系统、模具和振动系统、烘干和烧制系统等。压力系统是制砖机的主要组成部分之一,它通过压力将原料压缩成一定形状和尺寸的块状,然后经过烘干和烧制等步骤,…

解决单节点es索引yellow

现象 单节点的es,自动创建索引后,默认副本个数为1,索引状态为yellow 临时解决 修改副本个数为0 永久解决 方法1、修改elasticsearch.yml文件,添加配置并重启es number_of_replicas:副本分片数,默认…

【数据结构】——线性表的相关习题

目录 题型一(顺序表的存储结构)题型二(链表的判空)题型三(单链表的建立)题型四(顺序表、单链表的插入删除) 题型一(顺序表的存储结构) 1、线性表的顺序存储结…

解决Git下载失败太慢

解决Git下载失败太慢 Git 官网下载地址: https://git-scm.com/downloads Windows 下载地址: https://git-scm.com/download/win 用官网的地址下载, 需要从github上下载, 由于国内某些原因, 下载速度缓慢, 还经常失败. 国内用户, 可以通过镜像的方式, 提高下载速度. 阿里镜…

Linux - 进程地址空间

引入 在学习C语言的时候,内存包括栈区、堆区、静态区 这个布局是内存吗? 不是!! 这是进程地址空间! 下面测试一下: 11540是bash进程 我们修改一下源程序,在观察下结果 发现父进程的g_value的值不…

gitee修改代码提交操作步骤说明

一,简介 本文主要介绍如何从gitee仓库下载文件,本地修改,本地提交,然后再push到远程服务器的操作步骤。供参考,欢迎一起讨论交流~ 二,操作步骤 总的操作步骤分为以下几步 1,远程服务器下载文…

TI的IWR6843跑3D People Tracking(3D人体检测追踪实验)demo的上手教程

1.硬件准备 1.IWR6843板子 2.两个USB转串口模块(因为我的是自己做的板子,板子上没有集成USB转串口芯片) 2.软件准备 1.最新版本的CCS,注意后缀没有THEIA https://www.ti.com/tool/CCSTUDIO?DCMPdsp_ccs_v4&HQSccs 2.最新…

Linux(三)---------网络路由命令(route路由命令)

一.route路由命令 1.什么是route路由? 计算机之间的数据传输必须经过网络,网络可以直接两台计算机,也可以通过一个一个的节点去连接。路由可以理解为互联网的中转站,网络中的数据包就是通过一个一个的路由器转发到目的地的。 路…

微信小程序 - 解析富文本插件版们

一、html2wxml 插件版 https://gitee.com/qwqoffice/html2wxml 申请使用注意事项 插件版本解析服务是由 QwqOffice 完成,存在不稳定因素,如对稳定性有很高的要求,请自行搭建解析服务,或在自家服务器上直接完成解析。对于有关插…

私人网盘搭建(利用阿里云oss搭建)

1、个人网盘场景说明 个人网盘架构 使用ECS安装Cloudreve提供网盘服务,OSS提供存储服务。当用户使用个人网盘时,访问部署Cloudreve ECS的公网IP地址即可完成文件上传、下载、删除、分享等服务。 什么是Cloudreve Cloudreve可帮助您即刻构建出兼备自用…

视频太大怎么压缩变小?视频压缩技巧快来学

我们都知道,视频分辨率越高,文件体积也就越大,为了更好的存储、传输和播放,我们需要适当压缩视频的大小,那么怎么才能轻松的将视频文件压缩变小呢?下面就给大家分享几个简单的方法,一起来看看吧…

利用尺度因子方法恢复GRACE水储量变化

1.背景 重力恢复与气候实验(GRACE)观测地球重力势的时间变化。在考虑了大气和海洋效应后,每月到年际尺度上剩余的信号主要与陆地水储存(TWS)的变化有关。水储存变化的估计受到测量误差和噪声的信号退化影响&#xff0…

11年编码经验程序员惨遭淘汰解雇,原因竟是不会使用AI工具

近日,Twitter 上一名技术人分享了一个事件,即拥有11年Java编码经验、会 100% 手写代码的程序员因拒绝使用辅助代码工具,只想写可控的代码,竟败给一位仅有4年经验、却善用编码工具的后辈,惨遭面试淘汰。 当「拒绝使用编…

PHP代码审计——实操!

ctfshow PHP特性 web93 八进制与小数点 <?php include("flag.php"); highlight_file(__FILE__); if(isset($_GET[num])){$num $_GET[num];if($num4476){die("no no no!");}if(preg_match("/[a-z]/i", $num)){die("no no no!")…