基于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数据库即可,迁移完成之后录入一些伪数据,双击目录栏那边的数据库图标可以进入数据库里面,进行录入数据,暂且只需要录入两条数据

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()), ]

最新文章

  1. PHP 查看安装信息
  2. 关于react native
  3. C#解决验证码问题
  4. C#中的async和await
  5. Objective-C中nil与release的区别与用法
  6. 漫游Kafka实战篇之搭建Kafka运行环境
  7. IOS 支付宝 SDK 申请
  8. main函数的参数
  9. linux下core文件设置(转)
  10. javascript 阻止事件冒泡和阻止默认事件对比
  11. IOS 下雪动画
  12. CSS滤镜让图片模糊(毛玻璃效果)实例页面
  13. heapq
  14. Vijos P1881 闪烁的星星 (加强自己多一点。。)
  15. 比较实用的webpack配置代码
  16. VR全景项目领导者,VR全景智慧城市
  17. 【前端】Vue2全家桶案例《看漫画》之六、图片阅读页
  18. Oracle 体系结构chapter2
  19. CentOS上svn checkout时报错SSL handshake failed: SSL error: Key usage violation in certificate has been det
  20. 【转】大型Vuex项目 ,使用module后, 如何调用其他模块的 属性值和方法

热门文章

  1. pyinstaller 打包exe相关
  2. zk,kafka,redis哨兵,mysql容器化
  3. 165 pbi-utils 使用文档
  4. 解决一个mysql报错
  5. 关于 Windows6.1-KB2999226-x64.msu 此更新不适用你的计算机解决办法
  6. easyUI ajax拼接样式失效
  7. 疫情可视化part3
  8. JavaEE Day01 基础加强
  9. python3中的常见知识点2
  10. 大数据HDFS凭啥能存下百亿数据?