该文章在已有项目的基础上进行修改
https://blog.csdn.net/qq_38122800/article/details/128583379?spm=1001.2014.3001.5502
序列化 : 将从数据库中查的数据变为前端页面可以接受的json数据
反序列化 : 将前端传入的数据变为模型数据,通常用来做后端的数据校验用.本文不涉及这部分.
在DjangoProject2下新建serializers.py文件(文件名随意起)
代码:
from demo.models import Person #导入数据表模型
from rest_framework import serializers
class PersonModelSerializer(serializers.ModelSerializer):
class Meta:
model = Person
fields = "__all__"
在终端执行命令
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"
]
同一个接口,通过post访问时实现插入数据的功能,通过get访问实现查询数据的功能
导入模块
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>>>>>> ]>
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)
在demo/urls.py文件中配置路由,以对应在步骤3中写好的接口功能函数
代码:
urlpatterns = [
path("recordlist",views.RecordList.as_view). #接口地址:127.0.0.1:8000/st/recordlist
]
表单中加了first_name和last_name,接口返回了code200,表明接口访问成功
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 --location --request GET 'http://127.0.0.1:8000/st/recordlist?first_name=f'