目录
-
基于View接口
- 1.写模型表以及数据库迁移
- 3.使用CBV写查询所有的视图接口
- 4.配路由
基于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(,
]