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

简介: 18-Django REST framework-使用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/'

相关文章
|
23天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
125 45
|
1月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
41 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
24天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
35 2
|
3月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
61 2
|
3月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
60 0
|
3月前
|
JSON API 数据安全/隐私保护
哇塞!Django REST framework 太逆天啦!构建 API 服务从未如此轻松,你还不来试试?
【8月更文挑战第31天】Django REST framework(DRF)是基于Django框架的高效Web API开发工具,提供序列化、视图集、路由等功能,简化API构建流程。使用DRF可轻松实现数据的序列化与反序列化,并支持权限管理和认证机制以保障API安全。安装DRF只需通过`pip install djangorestframework`命令。要创建基本项目,先安装Django并创建新应用,定义模型、序列化器及视图集,最后配置路由。测试API时,可通过Postman发送HTTP请求验证功能。无论项目大小,DRF均能提供强大支持。
45 0
|
5月前
|
存储 JSON 数据库
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
|
5月前
|
JSON API 数据格式
Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
|
5月前
|
安全 API 数据安全/隐私保护
Django REST framework安全实践:轻松实现认证、权限与限流功能
Django REST framework安全实践:轻松实现认证、权限与限流功能
|
5月前
|
JSON 搜索推荐 数据库
Django REST framework数据展示技巧:分页、过滤与搜索的实用配置与实践
Django REST framework数据展示技巧:分页、过滤与搜索的实用配置与实践