學習使用"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
我們這裡用到了一個relationship叫HyperlinkedModelSerializer,你也可以使用其他的relationship,但是hyperlinked relations是比較符合RESTful 設計規範的。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')
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介面。