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

Posted 爱学习de测试小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/'

以上是关于18-Django REST framework-使用Django开发REST 接口的主要内容,如果未能解决你的问题,请参考以下文章

Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers

Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证

Django rest framework 身份和权限验证

rest_framework频率组件

Django Rest Framework

怎么安装django rest framework