目錄
為接口提供一個(gè)主頁
為序列化類增加url
配置全局分頁
- 為接口提供一個(gè)主頁
目前在瀏覽器中進(jìn)行的測試,我們都是通過輸入完整url來跳轉(zhuǎn)網(wǎng)頁测垛,當(dāng)提供的url變多時(shí)嫉拐,難免會(huì)忘記哪些url是有效的。為了避免這種情況绽诚,我們?yōu)锽rowserAPI提供一個(gè)主頁魄藕,來引導(dǎo)我們測試内列。
為每個(gè)url都增加一個(gè)參數(shù)name。
urlpatterns = [
url(r'^snippets/$', views.SnippetList.as_view(), name='snippet-list'),
url(r'^snippets/(?P<pk>[0-9]+)/$', views.SnippetDetail.as_view(), name='snippet-detail'),
url(r'^users/$', views.UserList.as_view(), name='user-list'),
url(r'^users/(?P<pk>[0-9]+)/$', views.UserDetail.as_view(), name='user-detail')
]
在myapp下新建一個(gè)api_path.py
在myapp/api_path.py增加主頁的view
from rest_framework.reverse import reverse
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET'])
def api_root(request, format=None):
return Response({
'users': reverse('user-list', request=request, format=format),
'snippets': reverse('snippet-list', request=request, format=format)
})
完成這個(gè)功能只需要一個(gè)簡單的FBV提供GET方法即可背率,這個(gè)view將返回所有有效的url(通過JSON格式)话瞧。
reverse方法通過url的名字,返回一個(gè)完整的url寝姿。
在myapp/api_path.py配置主頁的url
盡量不要使用任何正則式交排,保證我們直接訪問最原始的url就可以訪問的接口的主頁。
養(yǎng)成好習(xí)慣会油,為每個(gè)url都增加參數(shù)name个粱。
urlpatterns = format_suffix_patterns([
url(r'^$', views.api_root, name='api-index'),
...
])
配置后的接口主頁
image.png
現(xiàn)在可以直接通過點(diǎn)擊鏈接訪問有效的url了,但是不要忘記當(dāng)我們增加新的url后翻翩,要在主頁的view中進(jìn)行配置。
- 為序列化類增加url
現(xiàn)在我們的json數(shù)據(jù)稻薇,表的關(guān)系是通過id聯(lián)系的嫂冻,現(xiàn)在我們希望用url代替id。
在snippet/serializers.py更改序列化類
class SnippetSerializer(serializers.HyperlinkedModelSerializer):
...
highlight = serializers.HyperlinkedIdentityField(view_name='snippet-highlight', format='html')
class Meta:
...
fields = ('url', 'highlight', ...)
class UserSerializer(serializers.HyperlinkedModelSerializer):
snippets = serializers.HyperlinkedRelatedField(many=True, view_name='snippet-detail', read_only=True)
class Meta:
...
fields = ('url', ...)
將ModelSerializer改為HyperlinkedModelSerializer塞椎。
在繼承后桨仿,就自動(dòng)會(huì)增加一個(gè)字段url,但是需要手動(dòng)配置到fields中
為普通字段提供了HyperlinkedIdentityField案狠,為外鍵字段提供了HyperlinkedRelatedField服傍。其中最關(guān)鍵的參數(shù)view_name的值是url的參數(shù)name钱雷,也就是通過url配置中的name來獲取到對應(yīng)的url。
- 配置全局分頁
在drf_tutorial/settings.py配置分頁
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}