145. Django-restful项目实战:增加、删除、修改、查询

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 命令

  1. Get查询全部数据
    在这里插入图片描述

  2. 测试Post请求添加数据(使用curl方法)
    在这里插入图片描述

  3. GET请求查询指定数据
    在这里插入图片描述

  4. 测试Post请求修改数据(使用curl方法)
    在这里插入图片描述

  5. DELETE请求删除数据
    在这里插入图片描述

笔记:
什么时候序列化?什么时候反序列化?
当我们展示数据时,需要序列化,成为Json格式。当我们需要保存数据,修改数据时候,就需要反序列化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值