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号