【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
Django REST Framework API返回结果解析
学习了之前的文章我们知道如何使用Django REST framework框架设计API,我还使用Schools APP设计了一个API
除此之外,我们还可以查看API的OPTIONS,然后可以得很多信息,比如说第一行请求行'HTTP 200 OK',表示请求成功,第二行Allow表示允许的请求方式,Content-Type:application/json表示发送端发送的实体数据的数据类型。 还有下面的json数据,name表示接口名字、description详细描述、renders表示可解析的形式,parses是服务器端可解析的三种方式
我们还可以在app的views.py的类中可以给API添加注释,如比给前端人员的接口说明等信息,且注释可以在Django REST Framework的页面中显示;
class AllSchoolsView(APIView):
"""
这是AllSchoolsView的返回结果
"""
def get(self, request):
schools = School.objects.all()
schools_serializer = SchoolSerializer(schools, many=True)
return Response(schools_serializer.data)
然后重新运行项目,然后刷新页面,我们就可以得到如图的效果:
Django REST Framework的登录
首先为了避免在Django REST Framework 中登录时报错'CSRFCheck' object has no attribute 'process_request'
,我们需要将Django升级到1.11.6以上的版本:pip install django==1.11.6
,记得是两个等号哟。然后用户就可以使用之前创建的超级用户成功登录了
Restful API的方法
GET(SELECT)
:从服务器取出资源(一项或多项);
POST(CREATE)
:在服务器新建一个资源;
PUT(UPDATE)
:在服务器更新资源(客户端提供改变后的完整资源);
PATCH(UPDATE)
:在服务器更新资源(客户端提供改变的属性);
DELETE(DELETE)
:从服务器删除资源;
HEAD
:获取资源的元数据;
OPTIONS
:获取信息,关于资源的哪些属性是客户端可以改变的;
实现POST接口
首先编辑serializer.py文件,将SchoolSerializer类中的字段与School表中的字段一一对应,保证数据库写入不会报错;
from rest_framework import serializers
from .models import School
class SchoolSerializer(serializers.Serializer):
name = serializers.CharField()
desc = serializers.CharField()
location = serializers.CharField()
create_time = serializers.DateTimeField(default=datetime.now,)
course_numbers = serializers.IntegerField()
def create(self, validated_data):
"""
Create and return a new `Snippet` instance, given the validated data.
"""
return School.objects.create(**validated_data)
然后编辑views.py文件,修改AllSchoolsView类,新增一个post提交方法,在代码中打上断点;
from rest_framework.views import APIView
from .serializer import SchoolSerializer
from rest_framework.response import Response
from rest_framework import status
class AllSchoolsView(APIView):
"""
这是AllSchoolsView的返回结果
"""
def get(self, request):
schools = School.objects.all()
schools_serializer = SchoolSerializer(schools, many=True)
return Response(schools_serializer.data)
def post(self, request):
# 将request.data的数据进行校验
# request.data会拿到post提交的字段
serializer = SchoolSerializer(data=request.data)
# 如果验证字段合法
if serializer.is_valid():
# 直接保存到数据库,这里会调用GoodsSerializer的create方法
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
然后可以使用postman进行提交请求,先在Body中选择x-www-form-urlencoded的提交方式,然后填写好相应字段的值
然后发送send,在post方法中把得到的数据封装且进行序列化,返回到序列化对象serializer中,最后通过save方法保存到数据库中,然后我们访问http://127.0.0.1:12345/school/all/
,得到的数据是不是增加了一条新的记录呀
还可以直接在浏览器的页面中进行post请求,先选择提交格式,然后创建相应数据,直接点击POST,如果返回HTTP 201 Created,则数据已经被创建,写入了数据库中;
参考:https://www.9xkd.com/user/plan-view.html?id=4024758689
来源:oschina
链接:https://my.oschina.net/u/4072026/blog/3055391