首页 > 其他分享 >28-DRF框架-搭建环境开发restful接口

28-DRF框架-搭建环境开发restful接口

时间:2023-02-21 23:45:48浏览次数:44  
标签:count name get data 28 tid delete restful DRF

# 将程序中的一个数据结构类型转换为其他格式(字典、JSON、XML等),例如将Django中的模型类对象装换为JSON字符串,这个转换过程我们称为序列化
# 将其他格式(字典、JSON、XML等)转换为程序中的数据,例如将JSON字符串转换为Django中的模型类对象,这个过程我们称为反序列化

django开发rest接口

# 获取所有图书信息接口   GET /tushu/

# 增加图书              POST /tushu/
      参数为json格式
      状态码 201
      成功返回增加的数据内容



# /tushu/3/ 路径上有参数
    查询单个  GET
    修改某条数据  PUT
    删除某条数据   DELETE
# 新建tushu模型表 models.py
from django.db import models

# Create your models here.
from django.db.models import Model


class TuShu(Model):
    tid = models.AutoField(primary_key=True, verbose_name="图书id")

    name = models.CharField(max_length=20, verbose_name="图书名称")
    riqi = models.DateField(null=True, verbose_name="上架日期")
    count = models.IntegerField(default=0, verbose_name="数量")
    id_delete = models.BooleanField(default=False, verbose_name="是否删除")

    class Meta:
        db_table = "tushu"
        verbose_name = "图书"

    def __str__(self):
        return self.name


'''
python manage.py makemigrations # 根据模型类生成建表的语句
python manage.py migrate        # 创建表
'''
# 创建视图函数
import json

from django.http import JsonResponse, HttpResponse
from django.shortcuts import render

# Create your views here.
from django.views import View

from tushu.models import TuShu

'''
GET /tushu/  /tushu2/2/
POST /tushu/
PUT  /tushu/2/
DELETE /tushu/2/
'''


class TuShuView(View):
    # 查询所有
    def get(self, request):
        # 所有图书 结果集
        qset = TuShu.objects.all()
        # 转成json字典格式,序列化操作
        list = []
        for q in qset:
            list.append({
                "tid": q.tid,
                "name": q.name,
                "riqi": q.name,
                "count": q.count,
                "is_delete": q.id_delete
            })
        dict = {"code": 0, "error": "返回成功", "list": list}
        return JsonResponse(data=dict)  # safel=False:关闭校验字典格式的安全模式

    def post(self, request):
        # 1. 参数转成字典格式
        data = json.loads(request.body)
        print("---------data=", data)
        # 2. 参数校验

        # 3. 添加数据
        q = TuShu.objects.create(name=data.get("name"), riqi=data.get("riqi"),
                                 count=data.get("count"), id_delete=data.get("id_delete"))

        # 规范要求 增加成功之后返回增加的数据对象 状态码为201:已创建
        return JsonResponse(data={
            "tid": q.tid,
            "name": q.name,
            "riqi": q.riqi,
            "count": q.count,
            "id_delete": q.id_delete

        }, status=201)  # safe=False


class TuShuView2(View):
    # 查询单个图书接口
    def get(self, request, tid):
        try:
            q = TuShu.objects.get(tid=tid)
        except Exception:
            return JsonResponse(data={}, status=404)

        return JsonResponse(data={
            "tid": q.tid,
            "name": q.name,
            "riqi": q.riqi,
            "count": q.count,
            "id_delete": q.id_delete

        }, )

    # 修改信息
    def put(self, request, tid):
        try:
            q = TuShu.objects.get(tid=tid)
        except Exception:
            return JsonResponse(data={}, status=404)

        # 获取请求参数
        data = json.loads(request.body)
        q.name = data.get("name")
        q.riqi = data.get("riqi")
        q.count = data.get("count")
        q.id_delete = data.get("id_delete")
        # 保存
        q.save()

        return JsonResponse(data={
            "tid": q.tid,
            "name": q.name,
            "riqi": q.riqi,
            "count": q.count,
            "id_delete": q.id_delete

        }, status=201)

    # 根据tid删除
    def delete(self, request, tid):
        try:
            q = TuShu.objects.get(tid=tid)
        except Exception:
            return JsonResponse(data={}, status=404)

        # 执行删除
        q.delete()
        # return JsonResponse(status=204) # JsonResponse需要data参数
        # 删除成功后,要求返回空白文档 状态204
        return HttpResponse(status=204)
# 创建路由
urlpatterns = [
    # 用于get所有,post增加
    path('tushu/', TuShuView.as_view()),

    # 用于get查找, put修改,delete删除
    path('tushu/<tid>/', TuShuView2.as_view()),
]





标签:count,name,get,data,28,tid,delete,restful,DRF
From: https://www.cnblogs.com/kh-1314/p/17142864.html

相关文章

  • DRF view
    DRFviewViewDRF中的view分成三个等级,最基本的APIView,到GenericAPIView,再到GenericViewSet.Django用“视图”这个概念封装处理用户请求并返回响应的逻辑。视图是一......
  • 学习笔记283—CT、MRI、PET三种检查的临床比较
    CT(X线电子计算机断层扫描)主要是利用X线断层扫描,电光子探测器接收,并把信号转化为数字输入电子计算机,再由计算机转化为图像,是一种无痛苦、无损伤的辅助检查工具。 MR......
  • drf反序列化时出错
    -问题Postman传递json,drf反序列化时接受不到值,一直提示None-json数据点击查看代码{"number":"1","warehouse":"1","members":"1","handle......
  • 【LeetCode】28. 找出字符串中第一个匹配项的下标 -- 459. 重复的子字符串
    找出字符串中第一个匹配项的下标classSolution{public:intstrStr(stringhaystack,stringneedle){if(needle.size()==0)return0;ve......
  • 部署堡垒机2——安装MySQL8.0.32或8.0.28+
    MySQL的三大版本a)MySQLEnterpriseEdition:企业版本(付费)b)MySQLClusterCGE:高级集群版(收费)c)MySQLCommunityServer:社区版(开源) 登录MySQL官网https://www.mysql.com/d......
  • POJ 2228 Naptime 环形DP
    先不考虑环的情况dp[i][j][0]:前i个时间间隔中,已经花费了j个间隔,取得的最大值,并且第i个间隔在休息dp[i][j][1]:前i个时间间隔中,已经花费了j个间隔,取得的最大值,并且第i个间......
  • CentOS7 安装MySQL 8.0.28+
     MySQL的三大版本a)MySQLEnterpriseEdition:企业版本(付费)b)MySQLClusterCGE:高级集群版(收费)c)MySQLCommunityServer:社区版(开源) 登录MySQL官网https://www.mysql.com......
  • leetcode 28. 实现strStr()
    库函数#include<iostream>#include<string>usingnamespacestd;#definedebug(x)cout<<#x<<":"<<x<<endl;classSolution{public:intstrStr(stringh......
  • NRF52840-QIAA-R Nordic BLE5.0蓝牙无线收发芯片
    nRF52840相对于nRF52832具有更大的flash及ram,片内集成1MBflash,256kBRAM。支持蓝牙5.0,802.15.4,ANT及2.4GHz私有协议,同时与nRF51及nRF24系列兼容。nRF52840供电范围为1.7V......
  • 安装过程:oracle RAC 19c,节点2的root.sh执行失败,节点2集群启动失败,报错:CRS-1705/C
    环境介绍:个人笔记本电脑,VMwareWorkstationPro工具软件在两节点添加SCSI共享磁盘,LinuxOS7.6x64,安装OracleRAC19.3c具体日志报错信息如下:2023/02/1620:09:1......