18-Django REST framework-使用Django开发REST 接口

使用Django开发REST 接口


前言

  • 本篇来学习使用Django开发REST 接口

列表视图

"""
GET/books/提供所有记录
POST/books/新增一条记录
GET/books/<pk>/提供指定id的记录
PUT/books/<pk>/修改指定id的记录
DELETE/books/<pk>/删除指定id的记录
"""
# 列表视图:路由后面没有pk/id
class BooksAPIVIew(View):
    """
    查询所有图书、增加图书
    """

    def get(self, request):
        """
        查询所有图书
        路由:GET /books/
        """
        queryset = BookInfo.objects.all()
        book_list = []
        for book in queryset:
            book_list.append({
                'id': book.id,
                'btitle': book.name,
                'bpub_date': book.pub_date,
                'bread': book.readcount,
                'bcomment': book.commentcount,

            })
        return JsonResponse(book_list, safe=False)

    def post(self, request):
        """
        新增图书
        路由:POST /books/
        """
        json_bytes = request.body
        json_str = json_bytes.decode()
        book_dict = json.loads(json_str)

        book = BookInfo.objects.create(
            name=book_dict.get('name'),
            pub_date=datetime.strptime(book_dict.get('pub_date'), '%Y-%m-%d').date()
        )
        book.save()
        rsp_json = {
            'id': book.id,
            'btitle': book.name,
            'bpub_date': book.pub_date,
            'bread': book.readcount,
            'bcomment': book.commentcount,

        }

        return JsonResponse(rsp_json, status=201)

在这里插入图片描述

  • 新增书籍
curl --location --request POST 'http://127.0.0.1:8000/books/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name":"测试开发秘籍",
    "pub_date":"2022-09-24"
}'

  • 查看数据库

在这里插入图片描述

详情视图

# 详情视图:路由后面pk/id
class BookAPIView(View):
    def get(self, request, pk):
        """
        获取单个图书信息
        路由: GET  /books/<pk>/
        """
        try:
            book = BookInfo.objects.get(pk=pk)
        except BookInfo.DoesNotExist:
            return HttpResponse(status=404)

        return JsonResponse({
            'id': book.id,
            'btitle': book.name,
            'bpub_date': book.pub_date,
            'bread': book.readcount,
            'bcomment': book.commentcount
        })

    def put(self, request, pk):
        """
        修改图书信息
        路由: PUT  /books/<pk>
        """
        try:
            book = BookInfo.objects.get(pk=pk)
        except BookInfo.DoesNotExist:
            return HttpResponse(status=404)

        json_bytes = request.body
        json_str = json_bytes.decode()
        book_dict = json.loads(json_str)

        # 此处详细的校验参数省略

        book.name = book_dict.get('name')
        book.pub_date = datetime.strptime(book_dict.get('pub_date'), '%Y-%m-%d').date()
        book.save()

        return JsonResponse({
            'id': book.id,
            'btitle': book.name,
            'bpub_date': book.pub_date,
            'bread': book.readcount,
            'bcomment': book.commentcount
        })

    def delete(self, request, pk):
        """
        删除图书
        路由: DELETE /books/<pk>/
        """
        try:
            book = BookInfo.objects.get(pk=pk)
        except BookInfo.DoesNotExist:
            return HttpResponse(status=404)

        book.delete()

        return HttpResponse(status=204)

  • 查询单个书籍
curl --location --request GET 'http://127.0.0.1:8000/books/7' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name":"MySQL从删库到跑路",
    "pub_date":"2022-09-25"
}'

在这里插入图片描述

  • 修改书籍
curl --location --request PUT 'http://127.0.0.1:8000/books/7/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name":"MySQL从删库到跑路",
    "pub_date":"2022-09-25"
}'

在这里插入图片描述
在这里插入图片描述

  • 删除单个书籍
curl --location --request DELETE 'http://127.0.0.1:8000/books/8/'

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱学习de测试小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值