1. 程式人生 > >學習使用"Django REST framework"打造RESTful API介面——第一節 quickstart

學習使用"Django REST framework"打造RESTful API介面——第一節 quickstart

本文的操作是為了快速建立一個Django專案的REST介面,然後看看效果,讓你更有信心地使用這個框架。裡面有很多新的概念在後面會慢慢介紹。

準備開發環境

本人平時上班時使用的是windows進行開發。這裡介紹windows下的開發環境,MacOS下也是類似的。

本文假設大家都已經比較熟悉地掌握Python和Django,至少可以把Django服務起起來,自己做過一些小型網站。

使用Django REST framework來設計RESTful API,因為這個框架裡面用到了six模組,Django1.4.5以上的版本才包含這個模組,所以我使用的是Django 1.4.16。安裝方法:pip install django==1.4.16。

安裝Django REST framework:pip install djangorestframework

Python: 使用2.7

IDE選擇了PyCharm,版本是3.4。

1 建立專案

用PyCharm建立專案,名字為rest。位置自己設定,專案型別當然是Django,編譯器就選擇自己電腦上安裝的Python 2.7.6


點“OK”以後PyCharm要求你建立一個app,我們建立一個叫"quickstart"的app。

建立完以後,專案的結構就是這個樣子的:


這個裡面可以建立資料庫裡的表了,Django資料庫怎麼配置可以參考官方文件。REST framework的官網上的例子用的是Django 1.7, 所以使用python manage.py migrate來生成model對應的表,然後用python manage.py createsuperuser建立超級用使用者。 但是我用的是Django 1.4.16,所以命令不一樣。我們在PyCharm裡面選擇Tools->run manage.py task,然後輸入syncdb。這樣就會建立表,並且提示你建立一個超級使用者。


到此為止專案已經建立完成。

2 Serializers 序列化

在建立序列化,在此之前我們先建立一個model檔案,路徑是rest/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')
我們這裡用到了一個relationship叫HyperlinkedModelSerializer,你也可以使用其他的relationship,但是hyperlinked relations是比較符合RESTful 設計規範的。

3 Views 檢視

設計一個檢視來展示我們的API介面。建立一個檔案,路徑是rest/quickstart/views.py

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


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


class GroupViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer
這裡用了ViewSet,把所有功能相似的view放在一起。其他的地方為什麼這樣寫可以暫時不管。

4 URLs

現在要新增url,修改rest/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)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browseable API.
urlpatterns = +[
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
要注意,這裡的urlpatterns要用+=,因為你很可能還有自己其他的一些urlpatterns引數,不能完全像官網那樣用等於號。

5 Settings

修改rest/settings.py,新增一個rest_framework APP和一個REST_FRAMEWORK 變數。

INSTALLED_APPS = (
    ...
    'rest_framework',
)

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
    'PAGINATE_BY': 10
}

6 測試介面

現在可以啟動專案,測試一下介面了。在瀏覽器上輸入http://127.0.0.1:8000/users/,看到了user的API介面。