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

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触发器的工作过程&#xff0c;通过本账号2023年10月17日所发布博客“使用Java语言实现数字电路模拟器”中模拟基本逻辑门组成半加器电路的方法来模拟基本触发器的组成和时间延迟。 1 基本RS触发器电路结构 基本RS触发器&#xff08;又…...

c++函数指针作为std::map值

遇见一个场景&#xff0c;收到的tcp消息有个OperationID&#xff0c;然后执行具体的任务&#xff08;函数&#xff09;&#xff0c;在c#中使用Dictionary结合委托一点没问题&#xff0c;c#代码如下&#xff1a; public delegate void TcpHandler();Dictionary<OperateID, Tc…...

data对象内新增属性,console.log()可以打印出来,不重新渲染

原因&#xff1a;受 ES5 的限制&#xff0c;Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter&#xff0c;所以属性必须在 data 对象上才能让 Vue.js 转换它&#xff0c;才能让它是响应的&#xff1b; data(){newTitle:{title:’…...

React:实现一个定时器计数器,每秒自动+1

需求&#xff1a;实现一个定时器计数器&#xff0c;每秒自动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简介及入门案例 &#xff08;1&#xff09;什么是TypeScript&#xff1f; TypeScript 是 JavaScript 的一个超集&#xff0c;支持 ECMAScript 6 &#xff08;ES6&#xff09;标准。 TypeScript 由微软开发的自由和开源的编程语言。 TypeScript 设计目标是开发大…...

【工具推荐】一键多平台文章发布神器推荐(免费)

hello&#xff0c;大家好&#xff0c;我是你们老朋友洛林&#xff0c;上一篇文章说到自己深受多平台手动发布的折磨「传送门」&#xff0c;准备开发一款文章多平台工具&#xff0c;后来联系到 Wechatsync 原作者进行了简单的沟通&#xff0c;下面是关于以后的一些规划&#xff…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...