1. restful编写接口
1.1 代码展示
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from rest_app.models import *
from rest_app.app_serializer import StudentSerializer
from django.http import JsonResponse,HttpResponse
from rest_framework.parsers import JSONParser
# Create your views here.
'''
新增 post students/
删除 delete students/id/
修改 put students/id/
查询一个 get students/id/
查询所有 get students/
'''
# 完成新增 查询所有,路由相同,但是请求方式不同
@csrf_exempt # 关闭csrf中间件(防止利用cookie和token攻击网站)的使用
def students(request):
# 判断请求方式,完成新增和查询所有
if request.method == 'GET':
# 查询所有数据
stu_list = Student.objects.all()
# 序列化
serializer = StudentSerializer(stu_list, many=True)
# 将json格式返回客户端
return JsonResponse(serializer.data, safe=False)
elif request.method == 'POST':
# 新增数据
# 使用JSONParaser调用parse()进行反序列化为字典
data_dict = JSONParser().parse(request)
# 将字典传入到序列化类中
serializer = StudentSerializer(data=data_dict)
# 进行验证
if serializer.is_valid():
# 保存数据到数据库中
serializer.save()
# 返回新保存的数据 状态码 201
return JsonResponse(serializer.data, status = 201)
return JsonResponse(serializer.errors, status=400)
# 查询一个 删除 修改
@csrf_exempt # 关闭csrf中间件(防止利用cookie和token攻击网站)的使用
def students_detail(request,pk):
try:
# 根据pk获取Student
student = Student.objects.get(pk=pk)
except Student.DoesNotExist: #无法获取到
return HttpResponse(status=404)
if request.method == 'GET':
# 根据id查询指定的Student
# 序列化——展示数据
serializer = StudentSerializer(student)
# 返回json数据
return JsonResponse(serializer.data)
elif request.method == 'PUT':
# 根据id修改Student
# 反序列化——获取需要使用的数据时使用
data_dict = JSONParser().parse(request)
# 将原来的对象 字典数据传入序列化类中
serializer = StudentSerializer(student, data=data_dict)
# 进行验证
if serializer.is_valid():
# 更新数据到数据库
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors, status=400)
elif request.method == 'DELETE':
# 根据id删除student
student.delete()
return HttpResponse(status=200)
1.2 效果展示
get请求可以使用浏览器发送,但是post等其他http method的请求,浏览器测试起来就不方便了,本文档中使用 curl 工具在cmd中执行)来测试api 命令
-
Get查询全部数据
-
测试Post请求添加数据(使用curl方法)
-
GET请求查询指定数据
-
测试Post请求修改数据(使用curl方法)
-
DELETE请求删除数据
笔记:
什么时候序列化?什么时候反序列化?
当我们展示数据时,需要序列化,成为Json格式。当我们需要保存数据,修改数据时候,就需要反序列化。