Django之REST API接口开发的增删改查案例

https://blog.csdn.net/weixin_45912307/article/details/109006264

# view.py
from django.shortcuts import render

# Create your views here.
from django.views import View
from books.models import BookInfo
import json
from django.http import JsonResponse


class BooksView(View):
    massage = """
         获取所有和新增
         """

    def get(self, request):
        # get update
        # 1、查询所有图书对象
        books = BookInfo.objects.all()
        book_list = []
        for book in books:
            book_list.append(
                {
                    'id': book.id,
                    'btitle': book.btitle,
                    'bread': book.bread,
                    'bcomment': book.bcomment,
                    'bpub_date': book.bpub_date,
                }

            )
            return JsonResponse(book_list, safe=False)
        # 2、返回图书数据 [{},{}.{}]

    def post(self, request):
        """
        新增
        路由: POST/books
        """
        # 1、获取前端数据
        data = request.body.decode()
        # 将json数据变为字典形式
        data_dict = json.loads(data)
        # 2、验证数据
        btitle = data_dict.get('btitle')
        bpub_date = data_dict.get('bpub_date')
        if btitle is None or bpub_date is None:
            return JsonResponse({'error': '错误信息'}, status=400)
        # 3、保存数据
        book = BookInfo.objects.create(btitle=btitle, bpub_date=bpub_date)
        # 4、返回结果
        return JsonResponse(
            {
                'id': book.id,
                'btitle': book.btitle,
                'bread': book.bread,
                'bcomment': book.bcomment,
                'bpub_date': book.bpub_date,
            }
        )


class BookView(View):

    # get put delete
    def get(self, request, pk):
        """
        获取单个
        """
        try:
            # 1、获取前端数据  通过id路径查询
            book = BookInfo.objects.get(id=pk)
        except:
            return JsonResponse({'error': '错误信息'}, status=400)
        return JsonResponse({
            'id': book.id,
            'btitle': book.btitle,
            'bread': book.bread,
            'bcomment': book.bcomment,
            'bpub_date': book.bpub_date,
        })

    def put(self, request, pk):
    	"""
    	修改
    	"""
        data = request.body.decode()
        data_dict = json.loads(data)
        # 2、验证数据   先验证请求过来的名称和出版时间是否符合要求
        btitle = data_dict.get('btitle')
        bpub_date = data_dict.get('bpub_date')
        if btitle is None or bpub_date is None:
            return JsonResponse({'error': '错误信息'}, status=400)
        # 3、更新数据
        try:
            book = BookInfo.objects.get(id=pk)
        except:
            return JsonResponse({'error': '错误信息'}, status=400)
        # 4、返回结果
        return JsonResponse({
            'id': book.id,
            'btitle': book.btitle,
            'bread': book.bread,
            'bcomment': book.bcomment,
            'bpub_date': book.bpub_date,
        })

    def delete(self, request, pk):
    	"""
    	删除
    	"""
        try:
            book = BookInfo.objects.get(pk)
        except:
            return JsonResponse({'error': '错误信息'}, status=400)
        book.is_delete = True
        book.save()
        return JsonResponse({},status=204)

在子应用下新建url.py文件,并添加如下配置

# urls.py
urlpatterns = [
    url(r'^books/$', views.BooksVIew.as_view()),
    url(r'^books/(?P<pk>\d+)/$', views.BookView.as_view())
]
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值