Django_REST Framework -1.快速上手

Django REST Framework 快速上手

背景

這幾天正好在研究 RESTful 的方式來寫 API,然后上手 Django REST 框架。

Django REST Framework (以下簡(jiǎn)稱 DRF )是一個(gè)輕量級(jí)的庫,熟悉 Django 的話可以很容易的用它來構(gòu)建 Web API。

安裝前提

Django REST Framework 安裝需要以下前提:

  • Python (2.7, 3.2, 3.3, 3.4, 3.5)
  • Django (1.7+, 1.8, 1.9)

我自己的環(huán)境是:

  • Python 2.7.10
  • Django 1.8.2

安裝配置

安裝 DRF 需要用到 pip 命令

pip install djangorestframework
pip install markdown    # Markdown support for the browsable API.
pip install django-filter   # Filtering support

或者在 GitHub 上 clone 它

git clone git@github.com:tomchristie/django-rest-framework.git

接著在 Django Project 根目錄的 setting.py 文件中的 INSTALLED_APPS 加入 'rest_framework'

INSTALLED_APPS = (
    ...
    'rest_framework',
)

如果你要使用 DRF 的 browsable API 的話,你可能還需要添加 REST 框架的登錄登出視圖 ( views ),辣么需要在 url.py 文件中加入以下代碼:

urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

注: 這個(gè) URL 地址可以是任意的,但是必須 include 'rest_framework.urls' 和 namespace='rest_framework' 。

舉個(gè)栗子

現(xiàn)在我們來看一下一個(gè)簡(jiǎn)單的用 DRF 來構(gòu)建一個(gè)模型支持較好的 API 的栗子。

任何一個(gè)對(duì) REST 框架的全局設(shè)置都被放在 REST_FRAMEWORK 的模塊內(nèi),所以你需要在 settings.py 文件中添加以下代碼來通過 REST_FRAMEWORK 入口進(jìn)行全局設(shè)置:

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

現(xiàn)在我們可以構(gòu)建 API 了,編輯 Django 項(xiàng)目根目錄的 url.py 文件:

from django.conf.urls import url, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets

# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'is_staff')

# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

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

解釋一下,

每個(gè) xxxSerializer 都要繼承 ModelSerializer 來選擇模型和模型字段。

UserSerializer 類繼承了更符合 RESTful 設(shè)計(jì)的 HyperlinkedModelSerializer 超鏈接模型 Serializer 類,它和普通的 ModelSerializer 類有以下區(qū)別:

  • 缺省狀態(tài)下不包含 pk 字段
  • 具有一個(gè) url 字段,即HyperlinkedIdentityField類型
  • 用HyperlinkedRelatedField表示關(guān)系,而非PrimaryKeyRelatedField

然后在 class Meta 中選擇模型和要展現(xiàn)的模型元素

ViewSet 用來定義 View 的行為,和 Django 的 views 類似,用來處理 API 的 read 、write、 update 等方法(而 Django views 則處理 http 的 GET 和 POST )

在 ViewSet 實(shí)例化之后,通過 Router 類,最終將 URL 和 ViewSet 方法綁定起來。

ok,現(xiàn)在你可以通過在瀏覽器中訪問 http://127.0.0.1:8000/ 來查看你的 'users' API 了。

https://github.com/thehackercat/django-rest-framework-tutorial/blob

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容