1. 程式人生 > >Django REST framework 的快速入門教程

Django REST framework 的快速入門教程

ret turn ads 使用 blog 所有 定義 想去 cti

CRM-API項目搭建

序列器(Serializers)

首先,我們來定義一些序列器。我們來創建一個新的模塊(module)叫做 crm/rest_searializer.py ,這是我們用來描述數據是如何呈現的。

#從已存在的assets項目中導入數據models模塊
from crm import models
from rest_framework import serializers

# Serializers定義了API的表現形式.
#顯示超連接,繼承serializers.HyperlinkedModelSerializer
#顯示ID,繼承ModelSerializer

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserProfile
        #假設你想去多層的數據可加參數,深度
        depth = 2
        fields = (‘url‘, ‘email‘, ‘name‘, ‘is_staff‘,‘is_active‘,‘role‘)
        #註意:你想訪問role的對象(第三章表),你需要在定義一個類,將role的訪問權限也給它
class RoleSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = models.UserProfile
        fields = (‘name‘,)

需要註意的是,我們在這個案例中,使用了超鏈接關系(hyperlinked relations),借助的類是 HyperlinkedModelSerializer。你也可以使用主鍵(primary key)和其它一些關系型(relationships),但超鏈接(hyperlinking)是非常好的RESTful設計。

視圖(Views)

現在我們最好是寫些視圖。打開 crm/rest_view.py 然後打起你的鍵盤吧~

from crm import models
from rest_framework import viewsets
from crm import rest_searializer

# ViewSets 定義了 視圖(view) 的行為.
class UserViewSet(viewsets.ModelViewSet):
    ‘‘‘
    註意 以下兩個字段名是固定的不可修改queryset,serializer_class
    ‘‘‘
    queryset = models.UserProfile.objects.all()
    serializer_class = rest_searializer.UserSerializer


class RoleViewSet(viewsets.ModelViewSet):
    ‘‘‘
    註意 以下兩個字段名是固定的不可修改queryset,serializer_class
    ‘‘‘
    queryset = models.Role.objects.all()
    serializer_class = rest_searializer.RoleSerializer

比起傳統的做法,需要寫很多視圖,我們將所有的一般性行為(common behavior)組成一個 ViewSets 類。
如有需要,我們可很輕易的將其,拆分成數個單獨的視圖。但視圖組(viewsets)能讓視圖的邏輯結構清晰,而且簡潔。

URLs

寫url,crm/urls.py

from crm import views
from rest_framework import routers
from crm.rest_view import UserViewSet,RoleViewSet
# Routers 提供了一種簡單途徑,自動地配置了URL。
router = routers.DefaultRouter()
router.register(r‘users‘, UserViewSet)#需註冊
router.register(r‘roles‘, RoleViewSet)

# 使用自動的URL路由,讓我們的API跑起來。
# 此外,我們也包括了登入可視化API的URLs。
urlpatterns = [
    url(r‘^api/‘, include(router.urls)),
    #url(r‘^api-auth/‘, include(‘rest_framework.urls‘, namespace=‘rest_framework‘))#這個沒寫
]

因為我們用了視圖組(viewsets)而不是多個視圖,我們可以為我們的API自動的生成URL配置,只需簡單的將視圖組(viewsets)註冊到router類中即可

同樣的,如果我們需要對API URLs進行單獨控制,我們可以使用普通基於類(class based)的視圖,並詳細的配置每個URL。

最後,我們為可視化API,添加登陸/登出視圖。這是可選的,但對於需要登陸驗證的API,以及可視化的API卻是非常的有用。

Settings

我們也需要一些全局設置。我們想要分頁(pagination),我們希望API只對管理用戶開發。設置模塊會在 crm/settings.py

INSTALLED_APPS = (
    ...
    ‘rest_framework‘,
)
#帶分頁
REST_FRAMEWORK = {
    ‘DEFAULT_PERMISSION_CLASSES‘: (‘rest_framework.permissions.IsAdminUser‘,),
    ‘PAGE_SIZE‘: 10
}

#有關API相關的訪問權限的問題
REST_FRAMEWORK = {
    # 使用Django的標準`django.contrib.auth`權限管理類,
    # 或者為尚未認證的用戶,賦予只讀權限.
    ‘DEFAULT_PERMISSION_CLASSES‘: [
        ‘rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly‘
    ]
}

測試

技術分享

技術分享

技術分享

view視圖中調用接口

urls.py

urlpatterns = [
    url(r‘api_test‘,views.api_test,name=‘api_test‘)
]

views.py

from crm import rest_searializer
def api_test(request):
    if request.method == "POST":
        data = json.loads(request.POST.get(‘data‘))
        serializer_obj = rest_searializer.UserSerializer(data=data)
        if serializer_obj.is_valid():
            serializer_obj.save()
    return render(request,‘crm/api_test.html‘,locals())

api_test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>API測試</title>
</head>
<body>

<form action="" method="POST">{% csrf_token %}
    <textarea name="data" id="" cols="30" rows="10" ></textarea>
    <input type="submit">
</form>

{{ serializer_obj }}

</body>
</html>

Django REST framework 的快速入門教程