注册应用:booktest
在test应用中新建serializers.py用于保存该应用的序列化器。
创建一个BookSerializer用于序列化与反序列化。
1.直接是超链接
class BookSerializer(serializers.HyperLinkedModelSerializer):
class Meta:
model = Book
fields = ("url", "book_name", "book_price")
测试返回的结果如下:
{
"url": http://xxxxx/api/books/1/, # 可以直接点进去查看详情
"book_name": "",
"book_price": 100
},
2.使用模型中自带的字段在返回页面展示
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ("id", "book_name", "book_price")
测试返回的结果如下:
{
"id": 1,
"book_name": "西游记",
"book_price": 100.1
},
#- model 指明该序列化器处理的数据字段从模型类BookInfo 参考生成
#- fields指明该序列化器包含模型类中的哪些字段,__all__ 指明包含所有字段
3.继承最底层的Serializer方法
class BookSerializer(serializers.Serializer):
id = serializer.IntegerField(read_onle=True)
book_name = serializer.CharField()
book_price = serializer.FloatField()
# instance 更新的信息
# validated_data 获取信息
def update(self, instance, validated_data):
instance.book_name = validated_data.get("book_name") or instance.book_name
instance.book_price = validated_data.get("book_price") or instance.book_price
instance.save()
return instance
def create(self, validated_data):
return Book.objects.create(**validated_data)
类视图
# 重写请求方法进行相应请求发送
from django.views import View
class ImageView(View):
def get(self, request):
pass
def post(self, request):
pass
def put(self, request):
pass
def delete(self, request):
pass
python Mixin模式
# 普通继承,当继承链条很长会很复杂
# Mixin模式继承
rest_framework.mixins
ListModelMixin:无需id
1. 提供list(request, *args, **kwargs)方法
2. 获取模型类已存在的列表数据(多条数据)
3. 获取成功,则返回200 OK
CreateModelMixin:无需id
1. 提供create(request, *args, **kwargs)方法
2. 创建新的模型实例数据(创建新的记录)
3. 创建成功,则返回200 OK
RetrieveModelMixin:需id
1. 提供retrieve(request, *args, **kwargs)方法
2. 获取已存在的详情数据(一条)
3. 获取成功,则返回200 OK
4. 获取失败,则返回404 Not Found
UpdateModelMixin:需id
1. 提供update(request, *args, **kwargs)方法,用于全部更新
2. 提供partial_update(request, *args, **kwargs)方法,用于部分更新,支持PATCH方法
3. 更新已存在的模型实例(更新一条)
4. 更新成功,则返回200 OK
5. 更新失败,则返回 400 Bad Request
6. 如果不存在,则返回404 Not Found
DestroyModelMixin:需id
1. 提供destroy(request, *args, **kwargs)方法,用于删除
2. 删除一条已存在的数据(一条记录)
3. 删除成功,则返回200 OK
4. 删除失败,则返回 404 Not Found
from rest_framework.viewsets import ModelViewSet
from .serialziers import BookInfoSerializer
from .models import BooInfo
class BookInfoViewSet(ModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
from rest_framework.routers import DefaultRouter
router = defaultRouter() # 可以处理视图的路由器
router.register(r'books', views.BookInfoViewSet)
urlpatterns = routers.urls
urlpatterns += [
# url(r'book', views.BookInfoViewSet.as_view(),
...
]