18 传统方式写列表和详情视图
介绍
列表视图
获取所有和创建一个
详情视图
获取单个 修改单个 删除单个
创建项目
django-admin startproject BookManager
创建app
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'book_test',
        'USER':'root',
        'PASSWORD':'root',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    }
}
编写model
在Book的models.py中
from django.db import models
#定义图书模型类BookInfo
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20, verbose_name='名称')
    bpub_date = models.DateField(verbose_name='发布日期')
    bread = models.IntegerField(default=0, verbose_name='阅读量')
    bcomment = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    class Meta:
        db_table = 'tb_books'  # 指明数据库表名
        verbose_name = '图书'  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称
    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.btitle
#定义英雄模型类HeroInfo
class HeroInfo(models.Model):
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )
    hname = models.CharField(max_length=20, verbose_name='名称')
    hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
    hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
    hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')  # 外键
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    class Meta:
        db_table = 'tb_heros'
        verbose_name = '英雄'
        verbose_name_plural = verbose_name
    def __str__(self):
        return self.hname
python manage.py makemigrations
python manag.py migrate
导入数据库写好的数据库数据 或者 自己写入数据库数据
编写views
在book的views,py文件中
from django import http
import json
# 创建视图
from django.views import View
from .models import BookInfo
class BookInfoView(View):
    def get(self,request):
        '''获取所有书籍'''
        # 查询所有书籍
        books = BookInfo.objects.all()
        #序列化 将数据的对象转换为json对象
        book_list=[]
        for book in books:
            book_dict = {
                'id':book.id,
                'btitle':book.btitle,
                'bpub_date':book.bpub_date,
                'bread':book.bread,
                'bcomment':book.bcomment,
                'is_delete':book.is_delete
            }
            book_list.append(book_dict)
         #返回
        return http.JsonResponse(book_list,safe=False)
    def post(self,request):
        dict_data=json.loads(request.body.decode())
        book = BookInfo.objects.create(**dict_data)
        book_dict = {
            'id': book.id,
            'btitle': book.btitle,
            'bpub_date': book.bpub_date,
            'bread': book.bread,
            'bcomment': book.bcomment,
            'is_delete': book.is_delete
        }
        return http.JsonResponse(book_dict,status=201)
class BookInfoDetailView(View):
    def get(self,request,id):
        # 通过id获取
        book = BookInfo.objects.get(pk=id)
        book_dict = {
            'id':book.id,
            'btitle':book.btitle,
            'bpub_date':book.bpub_date,
            'bread':book.bread,
            'bcomment':book.bcomment,
            'is_delete':book.is_delete
        }
        return http.JsonResponse(book_dict,status=200)
    # 更新单个
    def put(self,request,id):
        # 获取更新结果和根据id获取该项
        book_data = json.loads(request.body.decode())
        # book = BookInfo.objects.get(id=id)
        # 校验参数(省略)
        # 更新数据
        BookInfo.objects.filter(id=id).update(**book_data)
        # 返回数据
        book = BookInfo.objects.get(id=id)
        book_dict = {
            'id': book.id,
            'btitle': book.btitle,
            'bpub_date': book.bpub_date,
            'bread': book.bread,
            'bcomment': book.bcomment,
            'is_delete': book.is_delete
        }
        return http.JsonResponse(book_dict)
    # 删除单个
    def delete(self,request,id):
        book = BookInfo.objects.get(id=id)
        book.delete()
        return http.JsonResponse({'msg':'删除成功'},status=204)
 
在Book应用中创建urls.py
from django.urls import path
from . import views
urlpatterns=[
    path('books/',views.BookInfoView.as_view()),
    path('books/<int:id>', views.BookInfoDetailView.as_view())
]
在BookManager的urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('booktest.urls'))
]
路由的具体使用看19-20章
运行 python manager runserver
使用 postman 访问 127.0.0.1:8000/book/ get获取全部 post添加一个
127.0.0.1:8000/book/1 get put delete 请求
                    
                
                
            
        
浙公网安备 33010602011771号