Restframework從入門到精通(四):Restframework之超連結API
阿新 • • 發佈:2019-12-31
演示前配置
拿外來鍵的例子來說,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'^$',複製程式碼
執行專案,可見執行成功