首页 > 其他分享 >基于View接口

基于View接口

时间:2023-02-08 19:24:05浏览次数:34  
标签:基于 name get price publish book 接口 import View

目录

基于View接口

​ Django原生即继承View来实现写接口,的确过程很繁杂,很多东西都是手动写,大致思路就是在视图层实现数据的序列化与反序列化,然后配两个路由,因为查单个数据和查所有用同一个接口会有点麻烦。当然首先写表模型,越简单越好。

1.写模型表以及数据库迁移

# 在models.Py中写如下代码
from django.db import models


class Book(models.Model):
    name = models.CharField(max_length=32, verbose_name='书名')
    price = models.CharField(max_length=32, verbose_name='价格')
    publish = models.CharField(max_length=32, verbose_name='出版社')

本次是因为小型本地测试所以用sqlite数据库即可,迁移完成之后录入一些伪数据,双击目录栏那边的数据库图标可以进入数据库里面,进行录入数据,暂且只需要录入两条数据

image

3.使用CBV写查询所有的视图接口

from django.shortcuts import render
from django.views import View
from .models import Book
from django.http import JsonResponse
from django.http import HttpResponse
import json


class BookView(View):
    def get(self, request):  # 查询所有
        # 首先查出所有的图书
        books = Book.objects.all()
        # 转成json格式 进行序列化(最终原始的序列化)
        book_list = []
        for book in books:
            book_list.append({'name': book.name, 'price': book.price, 'publish': book.publish})
        return JsonResponse(book_list, safe=False, json_dumps_params={'ensure_ascii': False})
        # return HttpResponse(json.dumps(book_list, ensure_ascii=False))

    def post(self, request):  # 新增一个
        # 获取前端传入的数据
        name = request.POST.get('name')
        price = request.POST.get('price')
        publish = request.POST.get('publish')
        # 存储到数据库中
        book = Book.objects.create(name=name, price=price, publish=publish)
        # 返回新增的对象
        return JsonResponse({'name': book.name, 'price': book.price, 'publish': book.publish})


class BookDetailView(View):
    def get(self, request, pk):  # 查询一个
        # 首先按照pk筛出来
        book = Book.objects.filter(pk=pk).first()
        # 然后一定返回该数据
        return JsonResponse({'name': book.name, 'price': book.price, 'publish': book.publish})

    def put(self,request, pk):
        # 也是先查出来
        book = Book.objects.filter(pk=pk).first()
        # 在修改该数据
        book_dict = json.loads(request.body)
        book.name = book_dict.get('name')
        book.price = book_dict.get('price')
        book.publish = book_dict.get('publish')
        # 保存修改结果
        book.save()
        # 返回修改结果
        return JsonResponse({'name':book.name, 'price':book.price, 'publish':book.publish})

4.配路由

from django.contrib import admin
from django.urls import path
from app01 import views


urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/books/', views.BookView.as_view()),
    path('api/v1/books/<int:pk>/', views.BookDetailView.as_view()),

]

标签:基于,name,get,price,publish,book,接口,import,View
From: https://www.cnblogs.com/almira998/p/17103020.html

相关文章

  • 一种基于简单的YAML的DSL的快速和可定制的漏洞扫描器
    介绍:Nuclei用于基于模板跨目标发送请求,从而实现零误报,并在大量主机上提供快速扫描。Nuclei提供多种协议的扫描,包括TCP、DNS、HTTP、SSL、File、Whois、WebSocket、Headless......
  • Go 工程化 - 使用 expvar 监控接口状态
    expvar 包为程序中的公共变量提供了一个标准化的接口,如服务中的访问计数器。包提供了HTTP接口并以JSON格式输出这些变量,接口的URL路由是 /debug/vars 。最重要的......
  • m基于FPGA的积分梳状CIC滤波器verilog设计
    1.算法描述积分梳状滤波器,是指该滤波器的冲激响应具有如下形式:其物理框图如图所示:可见,CIC滤波器是由两部分组成:累积器H1和H2梳状滤波器的级联。现若假设用N级CIC滤......
  • 基于无线路由器的停车场车位引导系统
    随着城市车辆保有量持续增长,市内停车位愈发紧张,司机朋友们寻找停车位的时长普遍增加,也额外消耗停车成本和时间。针对城市内商圈、小区、园区、景区等场景的停车场,可以部署基......
  • 旺店通·企业奇门和用友BIP单据接口对接
    旺店通·企业奇门和用友BIP单据接口对接来源系统:用友BIPYonBIP用友商业创新平台,是用友在数字经济时代面向成长型、大型企业及巨型企业,融合了先进且高可用技术平台和公......
  • 金蝶云星空和钉钉单据接口对接
    金蝶云星空和钉钉单据接口对接来源系统:钉钉钉钉(DingTalk)是阿里巴巴集团打造的企业级智能移动办公平台,是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时......
  • 金蝶云星空和旺店通·企业奇门接口打通对接实战
    金蝶云星空和旺店通·企业奇门接口打通对接实战源系统:金蝶云星空金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式;通过标准的业务架构:多会计准......
  • Spring27 - 基于注解的事务管理
    没有事务时遇到的问题模拟场景用户购买图书,先查询图书的价格,再更新图书的库存和用户的余额假设用户id为1的用户,购买id为1的图书用户余额为50,而图书价格为80购买图书之......
  • Spring29 - 基于XML的事务管理
    基于XML的声明式事务场景模拟参考基于注解的声明式事务与注解管理事务相同的通用步骤(1)开启组件扫描<!--扫描组件--><context:component-scanbase-package="com.......
  • HamsterBear Linux 开启GPIO子系统sysfs接口开启
    HamsterBearLinux开启GPIO子系统sysfs接口内核配置Generalsetup中打开内核feature或者直接搜索CONFIG_EXPERT开启gpio子系统sysfs接口Devicedrivers->......