1. 程式人生 > 程式設計 >Restframework從入門到精通(四):Restframework之超連結API

Restframework從入門到精通(四):Restframework之超連結API

演示前配置

拿外來鍵的例子來說,Book的外來鍵是Publish,點選Book的超連結API就可以訪問到外來鍵的Publish

為了方便演示,我這裡我就建立一個新的表Book,新增一個model欄位

models.py

class Book(models.Model):
    title=models.CharField(max_length=20,verbose_name="圖書名稱",unique=True)
    publish=models.ForeignKey("Publish",on_delete=True)

    def __str__(self):
        return
self.title class Meta: verbose_name="書籍" verbose_name_plural=verbose_name 複製程式碼

修改完model欄位要makemigrations->migrate

然後新增一個新的序列化檔案

serializer.py

from .models import Publish,Book
......
class Bookserializer(serializers.ModelSerializer):
    #通過publish這個外來鍵去找到publish這個表的name
    publish=serializers.StringRelatedField(source="publish.name"
) class Meta: model = Book fields = ( "id","title","publish" ) 複製程式碼

接下來要編寫檢視views檔案

views.py

from .models import Publish,Book
from .serializers import Publishserializer,Bookserializer
.......
class Book_list(generics.ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = Bookserializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)


class
Book_Detail(generics.RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all() serializer_class = Bookserializer permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 複製程式碼

最後要編寫路由方

urls.py

urlpatterns = [
    url(r'^admin/',admin.site.urls),#Publish的API
    url(r'^publish/$',Publish_list.as_view()),url(r'^publish/(?P<pk>[0-9]+)/$',PublisherDetail.as_view()),#Book的API
    url(r'^Book/$',Book_list.as_view()),url(r'^Book/(?P<pk>[0-9]+)/$',Book_Detail.as_view()),]
複製程式碼

執行專案可以看到專案執行成功,且post請求等都可以執行

這篇部落格講的就是要把publish外來鍵欄位的弄一個超連結,點選可以檢視這個出版社的所有欄位

即點選這上那個欄位都可以跳轉到出版社的API情況

配置超連結

配置超連結十分的簡單,只需要序列化欄位的類修改為HyperlinkedModelSerializer和刪掉剛剛配置的publish=serializers.StringRelatedField(source="publish.name")

serializers.py

class Bookserializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Book
        fields = (
            "id","publish"
        )
複製程式碼

urls.py

urlpatterns = [
    url(r'^admin/',url(r'^$',api_root),Publish_list.as_view(),name='publish-list'),PublisherDetail.as_view(),name='publish-detail'),Book_list.as_view(),name='Book-list'),Book_Detail.as_view(),name='Book-detail'),]
複製程式碼

配置完執行專案,可以看到已經配置好了超連結

顯示所有可用的API

我們需要一個路由,開啟可以顯示所有可用的API

檔案有這個方法的詳細說明

依照檔案的意思就是要在檢視檔案裡面新增這個欄位

views.py

from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.reverse import reverse
......
@api_view(['GET'])
def api_root(request,format=None):
    return Response({
        'publish': reverse('publish-list',request=request,format=format),'Book': reverse('Book-list',format=format)
    })
複製程式碼

然後我們配置一下路由

urls.py

    #api_root的路由
    url(r'^$',複製程式碼

執行專案,可見執行成功