天天看點

django restframeworkdjango rest_framework(1)

django rest_framework(1)

建立項目

mkdir tutorial
	cd tutoial
	virtialenv env
	source env/bin/activatie
	pip install django
	pip install djangorestframework
	django-admin startproject tutoial 
	cd tutorial
	django-admin startapp quickstart
	python manage.py migrate
	python manage.py createsuperuser --email [email protected] --username admin
           

serializer

建立新子產品 tutorial/quickstart/serializers.py 用于資料表示

from django.contrib.auth.models import user, Group
	 from rest_framework import serializers

	class UserSerializer(serializers.HyperlinkedModelSerializer):
		class Meta:
			model  = User
			fields = ('url', 'username', 'email', 'groups')


	class GroupSerializer(serializers.HyperlinkedModelSerializer):
	    class Meta:
	        model = Group
	        fields = ('url', 'name')
           

我們在這種情況下使用的是超連結關系HyperlinkedModelSerializer。您還可以使用主鍵和其他各種關系,但超連結是一種很好的RESTful設計。

View

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer


class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer
           

我們不是編寫多個視圖,而是将所有常見行為組合在一起調用ViewSets。

如果需要,我們可以輕松地将它們分解為單獨的視圖,但使用視圖集可以使視圖邏輯組織良好,并且非常簡潔。

urls

tutorial/urls.py

from django.urls import include, path

from rest_framework import routers

from tutorial.quickstart import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
           

因為我們使用視圖集而不是視圖,是以我們可以通過簡單地使用路由器類注冊視圖集來自動為我們的API生成URL conf。

同樣,如果我們需要更多地控制API URL,我們可以簡單地使用正常的基于類的視圖,并明确地編寫URL conf。

最後,我們将包含預設登入和登出視圖,以便與可浏覽API一起使用。這是可選的,但如果您的API需要身份驗證并且您想要使用可浏覽的API,則非常有用。

pagination

分頁允許您控制每頁傳回的對象數。要啟用它,tutorial/settings.py

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}
           

setting

添加’rest_framework’到INSTALLED_APPS。設定子產品将在tutorial/settings.py

INSTALLED_APPS = (
    ...
    'rest_framework',
)
           

run

python manage.py runserver