https://www.bilibili.com/video/BV1z5411D7BQ?p=8&vd_source=caabcbd2a759a67e2a3de8acbaaf08ea
models.py
from django.db import models
# Create your models here.
class Book(models.Model):
title=models.CharField(max_length=55,verbose_name="书籍名称")
price=models.IntegerField(verbose_name="价格")
# pub_date=models.DateField(verbose_name="出版日期")
pub_date = models.CharField(max_length=55,verbose_name="出版日期")
views.py
from django.shortcuts import render
# Create your views here.
from rest_framework.views import APIView
from sers.models import Book
from rest_framework import serializers
from rest_framework.response import Response
# 针对模型设计序列化器 ----查询数据库数据赋值到这个类然后扔出去
# (我把数据转成json给前端发叫序列化)
#(我把前端传过来的json变成数据模型叫反序列化)
class BookSerializers(serializers.Serializer):
id=serializers.IntegerField(read_only=True)#在客户端提交数据【反序列化阶段不会要求有id字段】 可以不传
title = serializers.CharField(max_length=8)
price = serializers.IntegerField()
# 左边date是给出去的字段,右边soure是具体数据模型对应取值的字段
date = serializers.CharField(source="pub_date")
# 接口输出例子
# [
# {
# "id": 1,
# "title": "aabook",
# "price": 199,
# "date": "2020-12-12 00:00:00"
# }]
class BookView(APIView):
def get(self,request):
# 获取所有书籍
book_list=Book.objects.all()
#这步其实就是把把查出来的数据赋值到序列化模型里---单条数据不需要many属性
serializer = BookSerializers(instance=book_list, many=True)
# # # # 调用序列化对象的data获取序列化后的数据
data = serializer.data
return Response(data)
def post(self,request):
# 获取请求的数据 #request.data可以拿到表单或json的数据
print("data",request.data)
# 构建序列化器
serializer = BookSerializers(data=request.data)
# # 校验数据--返回boolen值,成功信息放到serializer.validated_data,错误信息放到serializer.errors
if serializer.is_valid():
# 数据插入到数据库中
# 直接数据模型可插入
Book.objects.create(**serializer.validated_data)
#这种写法也可以插入数据
# Book.objects.create(title="111")
#数据校验通过
return Response(f'校验成功信息:{serializer.validated_data}') #serializer.validated_data是反序列化成数据模型了
# return Response(f'校验成功信息:{serializer.data}') #"校验成功信息:{'title': 'j11', 'price': 1999, 'date': '2020-12-12 00:00:00'}"
else:
# 数据校验失败
return Response(f'校验失败信息:{serializer.errors}')
#前端提交的参数
{
"title": "book1",
"price": 19,
"date":"2020-12-12 00:00:00"
}
标签:00,models,date,序列化,data,serializer,drf From: https://www.cnblogs.com/kaibindirver/p/16802477.html