Django-DRF学习笔记

Django-DRF

    • DRF实现

DRF实现

注册应用:booktest
在test应用中新建serializers.py用于保存该应用的序列化器。
创建一个BookSerializer用于序列化与反序列化。

  1. 创建序列化器
    三种展示数据的形式

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)    
  1. 编写视图
    在booktest应用的views.py中创建视图BookInfoViewSet,这是一个视图集合。
    FBV:使用函数处理请求 函数视图
    CBV:使用类处理请求 类视图
    CBV.as_view()
    在Django的路由中为url指定view的时候,如果为类视图(所有类视图都需要继承于基类View),则需要使用as_view方法将类视图转化为一个函数(继承自APIView),其实as_view方法在方法中定义了一个view函数,这个函数接受的参数跟FBV接受的参数一样,但是这个函数并不负责根据http的method分配到具体的CBV的method上,而是将这项工作交给了dispatch方法去完成。最后as_view方法返回了这个view函数

类视图

# 重写请求方法进行相应请求发送
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
  1. 定义路由
    在booktest应用的urls.py中定义路由信息from . import views
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(),
    ...
]

  1. 运行测试
    在浏览器中输入网址127.0.0.1:8000

你可能感兴趣的:(django,python,后端)