Django项目——通过APIView实现API访问

news2024/11/28 5:34:09

前提

该文章在已有项目的基础上进行修改
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)

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/153198.html

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

相关文章

Odoo 16 企业版手册 - 库存管理之重订货规则

重订货规则 在Odoo 库存模块中&#xff0c;您可以配置一组规则&#xff0c;帮助您确保库存永远不会用完。Odoo将尝试使用重订货规则在您的库存中保持至少最低数量的产品。让我们看看此功能在Odoo 16中是如何工作的。为此&#xff0c;您可以从库存模块中选择一个可存储的产品。 …

qt学习记录

一、新建项目时只有pro文件而没有其他文件 此时需要在Kits界面将所有编译器选择&#xff0c;即可出现其他文件 二、QMainWindow、QWidget、QDialog的区别 ①QWidget继承于QObject和QPaintDevice&#xff0c;QDialog和QMainWindow则继承于QWidget&#xff0c;QDialog、QMainWi…

[ 数据结构 ] 弗洛伊德算法(Floyd)--------最短路径问题

0 Floyd算法介绍 和 Dijkstra 算法一样&#xff0c;弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德命名弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路…

新应用——信息化财务管理,一站式满足多个需求

财务管理应用是企业为了适应当下社会环境提出的一种将财务管理进行信息化管理的方法&#xff0c;与传统财务管理模式不同&#xff0c;将各类业务数据编制为电子数据&#xff0c;便于财务人员查找数据内容&#xff0c;可以更高效的开展工作。百数应用中心的财务管理应用涵盖了项…

机器学习笔记之深度信念网络(二)模型构建思想(RBM叠加结构)

机器学习笔记之深度信念网络——模型构建思想引言回顾&#xff1a;深度信念网络的结构表示解析RBM隐变量的先验概率通过模型学习隐变量的先验概率引言 上一节介绍了深度信念网络的模型表示&#xff0c;本节将介绍深度信念网络的模型构建思想——受限玻尔兹曼机叠加结构的基本逻…

Flutter多分支打包持续化集成

一、使用效果演示 1.1、选择参数打包 以下为参数使用说明。 packingType枚举 android、ios android ios android&ios (新功能&#xff1a;并行打包)备注&#xff1a; android、ios&#xff1a;串行打包&#xff0c;即先打一个再打一个 android&ios&#xff1a;为并行…

与香港财政司司长同台,欧科云链在这场峰会上都说了啥?

今天&#xff0c;POWER 2023香港Web3创新者峰会在中国香港如期召开&#xff0c;香港特别行政区政府财政司司长陈茂波、财经事务及库务局副局长陈浩濂、全国政协委员、立法会议员吴杰庄等港府要员出席峰会。 作为本场峰会的受邀企业&#xff0c;欧科云链控股(01499.HK)公司执行董…

Kernel Pwn基础教程之 Double Fetch

一、前言 Double Fetch是一种条件竞争类型的漏洞&#xff0c;其主要形成的原因是由于用户态与内核态之间的数据在进行交互时存在时间差&#xff0c;我们在先前的学习中有了解到内核在从用户态中获取数据时会使用函数copy_from_user&#xff0c;而如果要拷贝的数据过于复杂的话…

人工智能-正则表达式

目录1、正则表达式概述2、re模块3、匹配单个字符4、匹配多个字符5、匹配开头和结尾6、匹配分组7、总结1、正则表达式概述 在实际开发过程中经常会需要查找某些复杂字符串的格式 正则表达式&#xff1a;记录文本规则的代码 正则表达式特点&#xff1a; 语法令人头疼&#xff…

立创eda专业版学习笔记(4)(隐藏铺铜)

这里的隐藏有两个意思&#xff0c;一个是铺铜过后把铺铜的填充区域隐藏&#xff0c;方便看图&#xff0c;另外一个是隐藏铺铜的轮廓&#xff0c;方便后续改进。 第一种隐藏&#xff0c;隐藏铺铜的填充区域&#xff08;成片的图块&#xff09;&#xff0c;但是保留轮廓线 这是全…

联想LJ2655DN激光打印机清零方法

联想LJ2655DN激光打印机是市面上常见的打印机,为了节约成本,我们一般使用都是代用硒鼓来代替原装硒鼓,但是发现更换完硒鼓以后还是不能打印甚至有的机器能够打印但是打印速度会变慢或很慢,这个时候这就需要我们对打印机进行清零复位操作了,此款机器因用户更换的硒鼓类型不…

C++ 模板进阶

目录 1. 非类型模板参数 2. 模板的特化 2.1 概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 2.3.3 类模板特化应用示例 3. 模板总结 1. 非类型模板参数 我们在C语言中使用数组的时候可以定义静态数组&#xff0c;但是有个缺陷就是编译器在对越界检查…

Java自定义泛型类注意点

目录 自定义泛型类 如果定义了泛型类&#xff0c;实例化没有指明类的泛型&#xff0c;则认为此泛型类型为Object类型 由于子类在继承带泛型的父类时&#xff0c;指明了泛型类型。则实例化子类对象时&#xff0c;不需要指明类型 由于子类在继承带泛型的父类时&#xff0c;没有…

WebDAV之葫芦儿·派盘 + Photosync

PhotoSync 支持WebDAV方式连接葫芦儿派盘。 苹果手机通过无线传输,备份和共享照片/视频到计算机,其他手机,NAS和流行的云和照片服务的最佳解决办法,快来试下PhotoSync同步工具吧。 PhotoSync面向移动设备

安装部署wordpress(Ubuntu)

wordpress是一个目前流行的基于web的内容管理系统软件。它是基于PHP语言和MySQL数据库开发的&#xff0c;用户可以在支持 PHP 和 MySQL数据库的服务器上快速轻松的部署自己的网站&#xff08;博客&#xff0c;外贸网站等等&#xff09;。WordPress有非常多的第三方开发的免费模…

产线工控安全之现状分析及方案应对

产线安全现状 工业控制系统是支撑国民经济的重要设施&#xff0c;是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域&#xff0c;支撑起国计民生的关键基础设施。 随着传统的工业转型&#xff0c;数字化、网络化和智能化的工业控…

数学建模---数值微积分

目录 一.引言 二.数值微分 1.数值差分与差商 利用matlab观察差分与差商的区别&#xff1a; 例题&#xff1a; 二.数值积分 1.数值积分基本定理 2.常见的数值积分公式&#xff1a; 积分公式的精度&#xff1a; 3.数值积分的matlab实现 一.引言 在科学研究和工程计算中&…

LINUX提权之环境变量提权篇

前言 上一篇文章给大家介绍了linux中的内核提权的一些知识点不知道大家学的怎么样了&#xff0c;今天给大家带来一个全新的提权方法——“环境变量提权”,本文会介绍关于环境变量提权的基本知识以及利用方法。 环境变量提权 PATH是Linux系统中的环境变量&#xff0c;指定存储…

全球月活用户4年破10亿,TikTok的3大底层逻辑

武汉瑞卡迪电子商务有限公司&#xff1a;在即将过去的2022年&#xff0c;TikTok成为了众多出海品牌想要赢得新生意的重要平台。品牌应该如何看待TikTok&#xff1f;如何利用节点营销抓住机会&#xff1f;那些已经在TikTok上成功的品牌背后&#xff0c;是否有一些定式&#xff0…

centos7安装ansible

在ansible中主控机器必须是linux机器&#xff0c;不可以是windows&#xff0c;但是被控机器可以是windows。 control machine&#xff1a;192.168.184.128 target machine&#xff1a;192.168.184.129(被管理机器上不需要安装什么软件) 1.ansible的安装前提是要有python&…