前提

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

原文地址:https://blog.csdn.net/qq_38122800/article/details/128626707

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_10493.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注