django+drf+vue 简单系统搭建 (2) - drf 应用
按照本系统设置目的,是为了建立一些工具用来处理简单的文件。
1. 准备djangorestframework
关于drf的说明请参见:Django REST Framework教程 | 大江狗的博客
本系列直接使用drf的序列化等其他功能。
安装
conda install djangorestframework
conda install django-filter
2. 创建工具的app
python manage.py startapp simpletool
创建简单的工具模型:
#simpletool/models.pyfrom django.db import models
from django.utils import timezone
# Create your models here.# 工具的model
class simpleTool(models.Model):title = models.CharField(max_length=50)description = models.CharField(max_length=200,default="")created = models.DateTimeField(default=timezone.now)updated = models.DateTimeField(auto_now=True)def __str__(self):return self.title
将app注册列表:
# drf_vue_tools/settings.pyINSTALLED_APPS = [''''rest_framework','simpletool',
]
然后要添加DRF的登录视图,以便DRF自动为可视化接口页面生成一个用户登录的入口:
# drf_vue_tools/urls.py...
from django.urls import includeurlpatterns = [...path('api-auth/', include('rest_framework.urls')),
]
最后再迁移数据:
python manage.py makemigrations
python manage.py migrate
3. 工具列表接口
工具模型已经定义好,现在写视图来查看所有工具:
#simpletool/views.py
from django.shortcuts import render
from django.http import JsonResponse
from simpletool.models import simpleTool
#暂时未定义
from simpletool.serializers import ToolListSerializer
# Create your views here.def tool_list(request):tools = simpleTool.objects.all()serializer = ToolListSerializer(tools,many=True)return JsonResponse(serializer.data,safe=False)
定义序列化器:
#simpletool/serializers.py
from rest_framework import serializersclass ToolListSerializer(serializers.Serializer):id = serializers.IntegerField(read_only=True)title = serializers.CharField(allow_blank=True,max_length=50)description = serializers.CharField(allow_blank=True)created = serializers.DateTimeField()updated = serializers.DateTimeField()
由上可见,views中得到所有tools list,创建序列化器,最后将序列化数据以Json形式返回。
而序列化器种定义的对象与原始models字段基本等同。
最后将各级urls.py 配置好:
# drf_vue_tool/urls.py
urlpatterns = ['''path('api/simpletool/',include('simpletool.urls',namespace='simpletool')),
]
以及
#simpletool/urls.py
from django.urls import path
from simpletool import viewsapp_name = 'simpletool'urlpatterns = [path('',views.tool_list,name='list'),
]
4. 创建管理员用户 & 添加测试数据
python manage.py createsuperuser
可自行设定用户名与密码,测试时设置为xiaofan0101,123456
更新admin文件
#simpletool/admin.py
from django.contrib import admin# Register your models here.
import inspect
import sys
from simpletool.models import *cls_members = inspect.getmembers(sys.modules[__name__],inspect.isclass)
for name,cls in cls_members:admin.site.register(cls)
运行:
python manage.py runserver

手动修改路径进入admin界面,使用管理员用户密码登录。

在simpletool中添加测试数据。

访问api/simpletool页面

5. 序列化器与视图
simpletool/serializers.py 中ToolListSerializer 与Model相似,代码感觉重复。DRF中提供了ModelSerializer来解决这个问题。序列化器文件可以修改为:
from rest_framework import serializers
from simpletool.models import simpleToolclass ToolListSerializer(serializers.ModelSerializer):class Meta:model = simpleToolfields = ['id','title','created']
ModelSerializer的功能与serializer基本一致,不同的是它额外做了些工作:
- 自动推断需要序列化的字段及类型
- 提供对字段数据的验证器的默认实现
- 提供了修改数据需要用到的.create(),.update()方法的默认实现
- 另外我们还可以再fields列表挑选需要的数据,以便减少数据体积。
除了对序列化器的支持以外,DRF还提供了对视图的扩展,以便视图更好的为接口服务。
将文章的视图修改如下:
主要的变化如下:
from django.shortcuts import render
from django.http import JsonResponse
from simpletool.models import simpleTool
from simpletool.serializers import ToolListSerializerfrom rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
# Create your views here.@api_view(['GET','POST'])
def tool_list(request):if request.method == 'GET':tools = simpleTool.objects.all()serializer = ToolListSerializer(tools,many=True)return Response(serializer.data) elif request.method == 'POST':serializer = ToolListSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data,status=status.HTTP_200_OK)return Response(serializer.error,status=status.HTTP_400_BAD_REQUEST)
- @api_view装饰器允许视图接收GET,POST请求,以及提供如405 Method Not Allowed等默认实现,以便在不同的请求下进行正确的响应。
- 返回了Response,该对象由Django原生响应体扩展而来,它可以根据内容协商来确定返回给客户端的正确内容类型。如果数据验证有误,还可以返回适当的状态码来表示当前的情况。

上述视图是由于Response提供的内容协商能力。也就是说,Django后端根据客户端请求响应的内容类型不同,自动选择合适的表现形式;浏览器请求资源时,就返回可视化的HTML资源表示,其他形式请求时,又可以返回Json纯数据形式。(可利用httpie验证)
conda install httpie
http http://127.0.0.1:8000/api/simpletool/

相关文章:
django+drf+vue 简单系统搭建 (2) - drf 应用
按照本系统设置目的,是为了建立一些工具用来处理简单的文件。 1. 准备djangorestframework 关于drf的说明请参见:Django REST Framework教程 | 大江狗的博客 本系列直接使用drf的序列化等其他功能。 安装 conda install djangorestframework conda i…...
【FastCAE源码阅读7】视图方向切换按钮实现原理
在FastCAE工具栏上有视图切换按钮,如下图所示: 本文介绍如何实现。 FastCAE集成了Python解析器,当单击按钮时,中间用Python执行的,最后调用MainWindow.dll库接口实现的。 具体的Python代码在Python模块的py文件夹下的…...
小程序如何设置自取模式下的服务方式
设置自取模式下的服务方式是非常重要的,尤其是对于到店自取和到店堂食这两种不同的服务模式。下面我们就来介绍一下如何在小程序中设置这两种服务方式。 在小程序管理员后台->配送设置处,在服务方式处,设置自取情况下的服务方式。默认是&…...
使用数据分析,识别设备异常
设备健康监测系统在工业领域中扮演着至关重要的角色,它能够帮助企业及时发现设备异常,预防故障,提高设备使用寿命和生产效率。而异常诊断技术则是设备健康监测系统中的核心部分,能够实现对设备异常情况的准确判断。根据设备状态数…...
redis数据倾斜如何解决
Redis数据倾斜主要是由于数据访问热点导致的,通常在执行事务操作或范围查询时发生。这会导致大量数据集中在某个实例上,使得集群负载不均衡。以下是一些解决Redis数据倾斜的方法: 避免在同一个键值对上保存过多的数据。可以将大的键值对拆分…...
ATFX汇市:美联储鲍威尔再发鹰派言论,美元指数逼近106关口
ATFX汇市:11月10日,美联储主席鲍威尔在IMF举办的专家小组会议上讲话称:“如果进一步收紧货币政策变得合适,美联储‘将毫不犹豫地’这样做。”他还提到,对目前通胀进展感到满意,但“还有很长的路要走”。鲍威…...
【异常----finally和自定义异常】
文章目录 finally练习问题 异常的处理流程【异常处理流程总结】自定义异常类 finally 有些特定的代码,不论程序是否发生异常,都需要执行,比如程序中打开的资源:在程序正常或者异常退出时,必须要对资源进进行回收。另外…...
C# OpenCvSharp 环形文字处理 直角坐标与极坐标转换
效果1 效果2 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.*…...
计算机视觉与深度学习 | 视频/图像转换及保存播放(Matlab源码)
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 视频/图像转换及保存/播放 avi2img.m 功能:将视频转换为单张图片avi2m…...
网格变形算法
网格变形 需求分析技术分析 需求分析 根据几何模型上的几个特征点,对几何模型进行变形。比如 技术分析 把几何模型使用三角面片表示,然后通过网格映射变形进行实现。关于网格这块有本经典的书可以参考,《ploygon mesh processing》。上面…...
2. Spark报错,Task is Failed,errorMsg: FileNotFoundException xxxx
完整报错信息 21304, Task is Failed,errorMsg: FileNotFoundException: File does not exist: hdfs://xxxx-bigdata-nameservice/user/hive/warehouse/edw_ic.db/xxxx/part-00000-c8a718b3-54b3-42de-b36c-d6eedefd2e02-c000.snappy.parquet It is possible the xxx报错场景 …...
Flutter开发实战之上传身份照片并认证
思路 UI视图 上传身份证照片可以选择拍照方式上传,相册选择方式上传即可 身份证照片进行认证功能实现 对身份证照片进行认证,包括正面认证和反面认证即可上传给后端 使用第三方插件 image_picker: ^0.8.4Future<XFile> _getCameraImage() async {final cameraImages = …...
C++文件加密、解密
简介 在计算机科学中,密码学是一种通过编码和解码信息以保护数据安全的技术。C++作为一种通用编程语言,可用于实现各种密码学算法。本文将介绍如何使用C++对文件进行加密和解密。以下是使用C++进行文件加密的示例。 文件加密 在C++中,我们可以使用密码学中的异或(XOR)操作…...
使用Java语言实现基本RS触发器
使用Java语言实现计算机程序来模拟基本RS触发器的工作过程,通过本账号2023年10月17日所发布博客“使用Java语言实现数字电路模拟器”中模拟基本逻辑门组成半加器电路的方法来模拟基本触发器的组成和时间延迟。 1 基本RS触发器电路结构 基本RS触发器(又…...
c++函数指针作为std::map值
遇见一个场景,收到的tcp消息有个OperationID,然后执行具体的任务(函数),在c#中使用Dictionary结合委托一点没问题,c#代码如下: public delegate void TcpHandler();Dictionary<OperateID, Tc…...
data对象内新增属性,console.log()可以打印出来,不重新渲染
原因:受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的; data(){newTitle:{title:’…...
React:实现一个定时器计数器,每秒自动+1
需求:实现一个定时器计数器,每秒自动1 import React, { useState, useEffect } from "react";export default function App() {let [count, setCount] useState(0);useEffect(() > {let timer setInterval(() > {setCount(count 1);…...
rocksdb 中 db_bench 的使用方法
硬件要求 硬件要求如表1所示。 表1 硬件要求 项目 说明 CPU 12 * AMD Ryzen 5 5500U with Radeon Graphics 内存 DDR4 磁盘 HDD 软件要求 软件要求如表2所示。 表2 软件要求 项目 版本 说明 下载地址 CentOS 7.6 操作系统。 Download kernel 4.14.0 内核。…...
【前端】TypeScript核心知识点讲解
1.TypeScript简介及入门案例 (1)什么是TypeScript? TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 (ES6)标准。 TypeScript 由微软开发的自由和开源的编程语言。 TypeScript 设计目标是开发大…...
【工具推荐】一键多平台文章发布神器推荐(免费)
hello,大家好,我是你们老朋友洛林,上一篇文章说到自己深受多平台手动发布的折磨「传送门」,准备开发一款文章多平台工具,后来联系到 Wechatsync 原作者进行了简单的沟通,下面是关于以后的一些规划ÿ…...
Topit:macOS窗口置顶终极指南,彻底释放多任务处理潜能
Topit:macOS窗口置顶终极指南,彻底释放多任务处理潜能 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 在macOS工作环境中,你…...
Mac用户如何通过12306ForMac实现高效抢票?四个核心功能详解
Mac用户如何通过12306ForMac实现高效抢票?四个核心功能详解 【免费下载链接】12306ForMac An unofficial 12306 Client for Mac 项目地址: https://gitcode.com/gh_mirrors/12/12306ForMac 还在为节假日抢不到火车票而烦恼吗?作为Mac用户…...
别再为定位精度发愁了!手把手教你用VICON+ROS搭建高精度真值系统(附避坑指南)
高精度运动捕捉与ROS集成实战:从VICON配置到算法验证全流程 在机器人定位算法开发中,获取可靠的基准数据往往比算法设计本身更具挑战性。传统GPS在室内环境完全失效,而里程计又存在累积误差,这使得运动捕捉系统成为验证SLAM和导航…...
抖音批量下载终极指南:免费开源工具快速搞定视频素材管理
抖音批量下载终极指南:免费开源工具快速搞定视频素材管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...
别再为虚拟机数据丢失发愁了!用Stellar Toolkit 11.0挂载VMDK/VHD文件恢复数据的保姆级指南
虚拟化环境数据恢复实战:Stellar Toolkit深度应用指南 虚拟化技术已成为现代IT基础设施的核心组件,但虚拟机数据丢失的风险却常被忽视。当VMDK文件损坏或快照回滚导致关键文档消失时,传统恢复工具往往束手无策。本文将揭示如何通过专业工具链…...
如何快速批量下载抖音视频:5个高效技巧与终极配置指南
如何快速批量下载抖音视频:5个高效技巧与终极配置指南 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 抖音批量下载助手是一款专业的Python自动化工具,专为需要批量获取抖音视频内容…...
突破ThinkPad散热极限:TPFanCtrl2双风扇控制终极指南
突破ThinkPad散热极限:TPFanCtrl2双风扇控制终极指南 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 还在为ThinkPad风扇噪音过大或散热不足而烦恼吗&#…...
网络安全入门实操:在Ubuntu 20.04虚拟机上配置SSH服务并用MobaXterm连接的全流程指南
网络安全实战:Ubuntu 20.04 SSH服务配置与MobaXterm安全连接全解析 在数字化时代,远程安全访问已成为IT基础设施的基石。想象一下,你坐在Windows电脑前,却能无缝操作一台Linux服务器,执行各种系统管理任务——这正是SS…...
J1900软路由折腾记:从ESXi 6.7报错到OpenWrt网络配置,一篇讲透所有坑
J1900软路由实战指南:ESXi 6.7避坑与OpenWrt网络调优全解析 当低功耗平台遇上虚拟化环境,总会碰撞出意想不到的火花。我手头这台J1900工控机,4GB内存搭配32GB存储的配置,在软路由领域堪称经典组合。但正是这套经济型硬件ÿ…...
别再用虚拟机了!5分钟在 Docker Desktop 里跑起你的第一个 CentOS 容器并配置开发环境
别再用虚拟机了!5分钟在 Docker Desktop 里跑起你的第一个 CentOS 容器并配置开发环境 还在为虚拟机卡顿、资源占用高而烦恼?今天带你用 Docker Desktop 快速启动一个 CentOS 开发环境,体验秒级启动的畅快感。相比传统虚拟机动辄几分钟的启动…...
