【DRF】CRUD 之 R(Read) - (实例场景:我的博客专栏=> 设计模式打造超级蜘蛛)

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_29757283/article/details/85940341

CRUD of Django-REST-Framework 之 R(Read)

1. 实例 django ORM model 回顾

class Site(models.Model):
    site = models.CharField(max_length=200)
    category = models.CharField(max_length=64)
    start_date = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.site

关于 Django ORM => model 中的 __str__ 特殊方法:
n/a
(note: 需要其支持 str() 否则需自己实现;正例: CharField; 反例: DatetimeField, ForeignKey)

2. Coding to support Read

a) 这是第一次使用 REST Framework,所以需要 Serialize

i. 什么是 Serialize

N/A

ii. 创建 serialize.py

N/A

b) ORM model mapping 的 Serialize

class SiteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Site
        fields = '__all__'

关于特殊方法 __all__:
N/A

c) urls.py

API 设计(或者说结构)
http://domain:port/api/sites/ - read sites list
http://domain:port/api/sites/<pk>/ - read one specific site

#### <django-proj>/api/urls.py
from django.urls import path
from django.http import HttpResponse

#
# API View
#
from .views import SiteList
from .views import SiteDetail


urlpatterns = [
    # 'http://domain:port/api/' \/
    path("", lambda request: HttpResponse("<h1>Hello Django REST Framework API</h1>")),

    path("sites/", SiteList.as_view(), name='sites_list'),
    path("sites/<int:pk>/", SiteDetail.as_view(), name="sites_detail"),
]

d) views.py

from django.shortcuts import render

# Create your views here.
from django.shortcuts import Http404, get_object_or_404

#####################################
# generic views
#####################################
from rest_framework import generics
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.response import Response

from api.models import Site
from .serializers import SiteSerializer


class SiteList(APIView):
    queryset = Site.objects.all()

    def get(self, request):
        sites = Site.objects.all()
        data = SiteSerializer(sites, many=True).data
        return Response(data)


class SiteDetail(APIView):
    queryset = Site.objects.all()

    def get(self, request, pk):
        site = get_object_or_404(Site, pk=pk)
        data = SiteSerializer(site).data
        return Response(data)

3. Test

a) create one by manual

(Note: 在 admin 后台管理中创建,model 注册 admin 用索引其它 blog 内容)

(创建内容 here)

b) GET(Read) It - n/a

  1. browser

  2. postman

    扫描二维码关注公众号,回复: 4818731 查看本文章

Reference

猜你喜欢

转载自blog.csdn.net/qq_29757283/article/details/85940341
今日推荐