咱們將會建立一個簡單的API,來讓管理員可以查看和編輯Users和Groups。python
建立一個新的項目叫 tutorial
,而後建立一個app叫quickstart
.數據庫
# 建立項目目錄 mkdir tutorial cd tutorial # 建立虛擬環境,並進入虛擬環境中 virtualenv env source env/bin/activate # 安裝django 和 REST framework pip install django pip install djangorestframework # 建立項目和app django-admin.py startproject tutorial cd tutorial django-admin.py startapp quickstart cd ..
建立數據庫:django
python manage.py migrate
建立一個超級用戶admin
,密碼是password123
。咱們將會在接下來的例子中使用這個帳戶。api
python manage.py createsuperuser
首先,咱們將去定義一些serializer
。建立一個新的模塊叫 tutorual/quickstart/serializers.py
。app
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.HyperlinkModelSerializer): class Meta: model = Group fields = ('url','name')
注意 這裏咱們使用 hyperlinked(HyperlinkedModelSerializer
)。你也能夠使用primary key和各式各樣其餘的關係。可是 hyperlinking是一個好的RESTful設計。ui
立刻,咱們將寫一些views.打開 tutorial/quickstart/views.py
url
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容許查看和編輯 用戶 """ queryset = User.object.all().order_by('-data_joined') serializer_class = UserSerializer class GroupViewSet(Viewsets.ModelViewSet): """ API容許查看和編輯 組 """ queryset = Group.objects.all() serializer_class = GroupSerializer
將有共同行爲的各式各樣的View歸爲一類並稱之爲 ViewSets
若是咱們須要,咱們能夠輕易的拆分這些View,可是使用 viewsets將會使View邏輯看起來更加整潔和有組織性。spa
如今,咱們來寫咱們的API URLs.在 tutorual/urls.py
設計
from django.conf.urls import url, include 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) urlpatterns = [ url(r'^', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
由於咱們使用了viewsets來替代views,咱們可以自動產生咱們API的URL,只要在router中簡單的註冊一下咱們的viewsets。
一樣,若是咱們須要更多的控制咱們的API URLs,咱們可以在簡單的在下面使用常規的 class-based views,並寫入url conf中。
最後,咱們使用 browsable API
來導入默認的登陸登出Views.這是可選的。rest
咱們還須要設置一些全局變量。咱們想啓用分頁和API只有Admin用戶可以調用。這些設置都在 tutorial/settings.py
中:
INSTALLED_APPS = ( ... 'rest_framework', ) REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAdminUser', ], 'PAGE_SIZE': 10 }