Django项目——通过APIView实现API访问,增删改查数据库

news2024/11/19 14:47:57

前提

该文章在已有项目的基础上进行修改
https://blog.csdn.net/qq_38122800/article/details/128583379?spm=1001.2014.3001.5502

1、配置序列化器

序列化器包含序列化和反序列化两个过程,简单点理解就是

序列化 : 将从数据库中查的数据变为前端页面可以接受的json数据
反序列化 : 将前端传入的数据变为模型数据,通常用来做后端的数据校验用.本文不涉及这部分.
在DjangoProject2下新建serializers.py文件(文件名随意起)
在这里插入图片描述
代码:

from demo.models import Person   #导入数据表模型
from rest_framework import serializers   

class PersonModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = "__all__"

2、安装Django Rest Framework

在终端执行命令

pip3 install djangorestframework

然后到settings.py文件中修改INSTALLED_APPS,配置rest_framework
在这里插入图片描述

代码:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "rest_framework",  #Django-Rest Framework是以Django扩展应用的方式提供的
    "demo"
]

3、实现接口功能

同一个接口,通过post访问时实现插入数据的功能,通过get访问实现查询数据的功能

打开view.py文件

导入模块

from rest_framework.views import APIView  #视图
from rest_framework.response import Response  #响应
from demo.models import Person   #数据表模型
from djangoProject2.serializers import PersonModelSerializer   #序列化器
from rest_framework import status   #接口状态码

定义接口实现的功能

新建一个类,继承APIView

这里说明一下,在插入数据的时候,用create可以插入数据

obj= Person.objects.create(first_name = first_name,last_name = last_name)

但是这种用法要指明每个字段对应的值,所以就采用了update_or_create(),这种方法可以在defaults后直接写上整个json串.具体用法:

update_or_create(defaults=None, **kwargs)

执行规则: filter kwargs,create/update defaults
返回值为元组: (object, created)object为新建或者更新的对象,created为一个布尔值,表示是新建还是更新,True为新建

接口的代码:

class RecordList(APIView):
    res = {
        'code': status.HTTP_200_OK,
        'data':None,
        'msg': 'success',
    }
    
    #通过post请求时,实现插入数据的功能
    def post(self,request):
        #获取前端传入的请求体数据
        first_name = request.POST.get('first_name')
        last_name = request.POST.get('last_name')

        data = {
            'first_name':first_name,
            'last_name': last_name,
        }
        print("data>>>>>>",data)

        #update_or_create需要提供一个查询参数,先查询,如果不存在,则插入,如果存在,则更新。这里设置id为None,可以达到直接插入的效果
        obj,iscreated= Person.objects.update_or_create(defaults=data,id=None)
        print("插入结果>>>>>>>",obj)
        return Response(self.res)

    #通过get请求时,实现查询数据库并返回给接口的功能
    def get(self,request):
        #获取接口传入的数据
        first_name = request.GET.get('first_name')
        #根据first_name查询数据库
        data_obj = Person.objects.filter(first_name=first_name)

        #data_obj>>>>>> <class 'django.db.models.query.QuerySet'> <QuerySet [<Person: Person object (5)>]>
        print('data_obj>>>>>>',type(data_obj),data_obj)

        #实例化序列器
        ser = PersonModelSerializer(instance=data_obj,many = True)

        #获取序列化后的数据
        self.res['data'] = ser.data

        # 将数据返给接口
        return Response(self.res)
	#删除数据
    def delete(self, request):
        first_name = request.GET.get('first_name')
        obj = Person.objects.filter(first_name = first_name).delete()
        self.res['data'] = obj
        return Response(self.res)

4、配置路由

在demo/urls.py文件中配置路由,以对应在步骤3中写好的接口功能函数
在这里插入图片描述

代码:

urlpatterns = [
    path("recordlist",views.RecordList.as_view). #接口地址:127.0.0.1:8000/st/recordlist
]

5、使用postman请求接口,验证效果

插入数据

表单中加了first_name和last_name,接口返回了code200,表明接口访问成功
在这里插入图片描述

curl的内容,复制到posrman中可用

curl --location --request POST 'http://127.0.0.1:8000/st/recordlist' \
--form 'first_name="f"' \
--form 'last_name="l1234"'

进入数据库,可以看到插入的数据
在这里插入图片描述

查询数据

接口还是:http://127.0.0.1:8000/st/recordlist
访问方式:get
在参数重添加了first_name为f,要查询数据库中first_name为f的数据,可以看到接口返回了查询到的所有数据
在这里插入图片描述

curl的内容,复制到posrman中可用

curl --location --request GET 'http://127.0.0.1:8000/st/recordlist?first_name=f'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157096.html

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

相关文章

机器学习的逻辑回归(Logistic)的实例————预测学生是否被录取

目录要求代码1. 导入模块2. 导入数据3. 求解theat的最优值,画出样本的位置和决策边界。4. 画出迭代函数随迭代次数变化的曲线,代价函数最终的收敛值5.比较三种学习率的代价函数随迭代次数变化的曲线5.1 学习率为0.00035.2 学习率为0.00055.3 学习率为0.00001要求 代码 1. 导入…

PySpark和RDD对象详解

目录 一.了解Spark、PySpark Spark是什么 Python on Spark Pyspark 小结 二.构建PySpark执行环境入口对象 PySpark的编程模型 小结 三.RDD对象 python数据容器转RDD对象 注意 演示 读取文件转RDD对象 演示 一.了解Spark、PySpark Spark是什么 定义:Apache Spark是用…

计算机组成原理【2】

文章目录一 计算机系统的层次结构1.1 思维导图1.2 计算机机器的五个层次1.3 三种级别的语言1.4 区分计算机组成原理和计算机体系二 计算机性能指标2.1 思维导图2.2 主存储器性能指标2.3 CPU性能指标2.4 系统整体的性能指标2.5 系统整体性能指标【动态测试】三 进位计数制3.1 思…

springboot整合opencv进行灰度图像与RGB图像互转

问题&#xff1a; 在开发过程中遇到一个问题&#xff0c;需要在图片上加上数据&#xff08;原卷留痕&#xff09;&#xff0c;由于图片是灰度的&#xff0c;无法进行彩色编辑&#xff0c;需要将灰度图片转成RGB图片&#xff0c;才能进行彩色编辑&#xff0c;于是想到用opencv进…

Grafana 告警模块介绍

Grafana 系列文章&#xff0c;版本&#xff1a;OOS v9.3.1 Grafana 的介绍和安装Grafana监控大屏配置参数介绍&#xff08;一&#xff09;Grafana监控大屏配置参数介绍&#xff08;二&#xff09;Grafana监控大屏可视化图表Grafana 查询数据和转换数据Grafana 告警模块介绍 Gra…

Java对接JeePay支付、转账实现以及回调函数

最近公司对接了第三方支付平台JeePay&#xff0c;看到网上文章比较少&#xff0c;给大家发一篇对接微信支付的吧&#xff0c;支付宝也一样&#xff0c;更换里面的参数即可&#xff0c;官方文档地址&#xff1a;系统介绍 - 计全文档&#xff0c;具体的服务需要大家去搭建&#x…

为ABP新增手机验证模块

当前手机验证基本是标配&#xff0c;但Abp自身并没有实现这个功能&#xff0c;于是有了通过自定义模块实现的想法。 经过研究&#xff0c;发现要实现这个&#xff0c;只要重写和替换包含ReplaceEmailToUsernameOfInputIfNeeds方法的类就可以了。但要实现这个&#xff0c;首先要…

sql server提供三种常用截取字符串方法,LEFT()、RIGHT()、SUBSTRING()

一、sql server提供了三种常用截取字符串方法&#xff0c;LEFT()、RIGHT()、SUBSTRING() 1、LEFT()函数语法&#xff1a;LEFT(character,integer) 注释&#xff1a;参数1&#xff1a;要截取的字符串&#xff0c;参数2&#xff1a;截取字符个数说明&#xff1a;返回从字符串左边…

你的 VS Code 扩展值得信赖吗?

Aqua Nautilus 研究人员最近发现&#xff0c;攻击者可以轻松地冒充流行的 Visual Studio Code 扩展并诱骗不知情的开发人员下载它们。VSCode 是迄今为止最受欢迎的 IDE&#xff1b;StackOverflow 的一项调查指出&#xff0c;其目前已被 74.48% 的开发人员所使用。VSCode 的强大…

SPDK技术浅析

目录SPDK基础知识SPDK架构SPDK使用rpc后台启动基础机制分析后端vhost异步I/O写该篇的来由是因为翻阅到了TriCache: A User-Transparent Block Cache Enabling High-Performance Out-of-Core Processing with In-Memory Programs文章&#xff0c;其中对SPDK的运用的炉火纯青&…

数据结构(1)并查集

(4条消息) 第五课、Trie树、并查集、堆和堆排序_yan__kai_的博客-CSDN博客 活动 - AcWing 并查集作用&#xff1a;一群元素将可以归类到一个代表元素上。可以维护元素到根节点的距离。可以维护每个并查集的大小。 基本操作回顾基础课&#xff0c;特别是“食物链”那道题 目录…

【Django项目开发】部门管理模块的开发(八)

文章目录一、模型类设计二、视图设计1.都有哪些接口三、序列化器类设计四.分页操作1.utils工具中定义pagination.py2.视图类中使用五.路由配置一、模型类设计 一个部门下面可能会有很多子部门&#xff0c;一个子部门上面可能会有父部门&#xff1b;即部门内部之间进行关联&…

国科大模式识别与机器学习2022年期末总结

我根据本学期老师说的考试重点和我自身的情况总结的&#xff0c;希望能帮助到你&#xff0c;如有错误欢迎指正 目录第三章 判别函数Fisher线性判别感知机算法第四章 特征选择和提取K-L变换第五章 统计学习学习基础损失函数风险正则化过拟合欠拟合泛化误差第六章 有监督学习有监…

【jQuery】常用API——jQuery内容文本值

要针对元素的内容还有表单的值操作。 普通元素内容 html()&#xff08;相当于原生 inner HTML) html(); // 获取元素的内容html(内容); // 设置元素的内容<script src"../jquery.min.js"></script> </head><body><div><span>我是…

118页4万字智慧检务大数据平台解决方案

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 目录 第1章 前言 1.1、 政策背…

docker-compose keep-alive mysql8 互为主从

一、准备2台物理机器master-1、master-2&#xff0c;目标虚拟VIP。   VIP:192.168.1.139   master-1:192.168.1.17   master-2:192.168.1.20    二、然后分别在2台物理机器master-1、master-2上使用docker-compose安装mysql8&#xff0c;并配置互为主从。 1&#xff09…

优先级队列、仿函数和反向迭代器

文章目录优先级队列priority_queue的模拟实现框架无参的构造(默认构造)迭代器区间构造向上调整向下调整插入删除取堆顶的数据求数据个数验满初识仿函数模拟实现仿函数更改后的向上调整仿函数更改后的向下调整反向迭代器具体实现优先级队列 1.优先队列是一种容器适配器&#xf…

微信转账api(企业付款)

企业付款介绍 提供企业向用户付款的功能&#xff0c;支持企业通过API接口付款&#xff0c;或通过微信支付商户平台网页功能操作付款。 1. 充值 登录微信支付商户平台&#xff0c;通过网页充值功能充值&#xff08;商户平台-资金管理-现金管理-充值&#xff09;。 温馨提示&a…

BreederDAO x DigiCult AMA——要点总结

问&#xff1a;为什么 BreederDAO 决定花费 200ETH 用于购买 Mythic DigiDaigaku Genesis — Ifrit&#xff1f; 答&#xff1a;除了投资之外&#xff0c;这也是为了确保这个领域中有更多的可触达性&#xff0c;尤其是随着我们 DigiDaigaku 市场工具的推出之后。这也是我们进入…

(十七)Async异步和多线程-语言进阶1

&#xff08;十七&#xff09;Async异步和多线程-语言进阶1一、进程-线程-多线程&#xff0c;同步和异步1.概念2.同步和异步3.异步与多线程异同点二、委托启动异步调用1.同步方法2.异步方法三、多线程的特点四、异步的回调和状态参数1.顺序控制2.状态参数五、异步等待三种方式1…