Django REST Framework(一) 初步使用

介紹

Django REST framework 是一個強大且靈活的工具包,用以構建Web APIs。
爲什麼要使用REST framework?
- 在線可視的API,對於贏得你的開發者們十分有用

  • 驗證策略涵蓋了OAuth1a和OAuth2

  • 同時支持ORM和非ORM數據源的序列化

  • 可以配置各個環節,若無需更多強大的特性,使用一般基於方法(function-based)的視圖(views)即可

  • 大量的文檔,強力的社區支持

  • 大公司如同Mozilla和Eventbrite,也是忠實的使用者

1. 配置要求

REST framework 有以下的要求:

Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6)
Django (1.7+, 1.8, 1.9, 1.11)
下面是可選的包:

Markdown (2.1.0+) - Markdown爲可視化 API 提供了支持.
django-filter (0.9.2+) - 過濾支持.
django-crispy-forms - 爲過濾,提供了改良的HTML呈現.
django-guardian (1.1.1+) - 對象層面的權限支持.

2. 安裝部署

pip install djangorestframework

將 'rest_framework' 添加到你的 'INSTALLED_APPS' 設置裏

INSTALLED_APPS = (
    ...
    'rest_framework',
)
如果你需要使用可視化的API,你也許就需要添加REST Framework的登陸/登出視圖。在項目的 urls.py文件裏,添加下面的內容:


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

3. 示例

讓我們看一個簡單用例:如何用REST framework 來搭建一個簡單的支持modle的API

我們將創建一個讀/寫API,來處理我們項目中的用戶信息。
任何REST framework的全局設置,都存放在一個配置字典中,名爲REST_FRAMEWORK。

我們從以下的操作開始,把下面的內容添加到項目的settings.py模塊中:

REST_FRAMEWORK = {
    # 使用Django的標準`django.contrib.auth`權限管理類,
    # 或者爲尚未認證的用戶,賦予只讀權限.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}
這是項目目錄下urls.py模塊:

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

# Serializers定義了API的表現.
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'email', 'is_staff')

# ViewSets 定義了 視圖(view) 的行爲.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routers 提供了一種簡單途徑,自動地配置了URL。
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

# 使用自動的URL路由,讓我們的API跑起來。
# 此外,我們也包括了登入可視化API的URLs。
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
啓動項目 python manage runserver 8000 瀏覽器 http://127.0.0.1:8000/裏,打開新建的’users’ API了

使用右上角的登陸控制,可以對系統用戶進行新增和刪除操作

上面的是官網中的 把所有的都寫在了urls中 下面的是自己的分開寫的方法

在app下創建一個serializers.py 文件 主要就是來寫 需要寫序列化的model的

from django.contrib.auth.models import User
from .models import UserProfile, Content
from rest_framework import serializers


# Serializers定義了API的表現形式.
class UserSerializer(serializers.ModelSerializer):  # 使用ModelSerializer 來序列化model層
    """序列化user模型"""

    class Meta:
        model = User  # 指定要序列化的模型
        fields = ('username', 'email', 'is_staff')  # 指定要序列化的字段


class UserProfileSerializer(serializers.ModelSerializer):
    """序列化userprofile 模型"""

    class Meta:
        model = UserProfile
        fields = ('age', 'image')


class ContentSerializer(serializers.ModelSerializer):
    """content 模型"""

    class Meta:
        model = Content
        fields = ('name', 'age', 'image')


在app下創建一個restful_views.py 文件 主要就是用來存放視圖類的

一個視圖類對應了一個序列化的model

from rest_framework import viewsets
from .serializers import UserSerializer, UserProfileSerializer, ContentSerializer
from django.contrib.auth.models import User
from .models import UserProfile, Content


# ViewSets 定義了 視圖(view) 的行爲.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()  # 把數據取出來 交給 制定的序列化對象去序列化數據
    serializer_class = UserSerializer


class UserProfileViewSet(viewsets.ModelViewSet):
    queryset = UserProfile.objects.all()
    serializer_class = UserProfileSerializer


class ContentViewSet(viewsets.ModelViewSet):
    queryset = Content.objects.all()
    serializer_class = ContentSerializer

在app下創建一個restful_urls.py 文件 主要就是用來存放url映射的

from django.conf.urls import include, url
from rest_framework import routers
from .restful_views import UserViewSet, UserProfileViewSet, ContentViewSet

# Routers 提供了一種簡單途徑,自動地配置了URL。
router = routers.DefaultRouter()  # 創建router實例
router.register(r'users', UserViewSet)  # 註冊一個url 然後對應上我們自己寫的類視圖函數
router.register(r'profile', UserProfileViewSet)  
router.register(r'content', ContentViewSet)  

# 使用自動的URL路由,讓我們的API跑起來。
# 此外,我們也包括了登入可視化API的URLs。
urlpatterns = [
    url(r'^', include(router.urls)), # django封裝了自己的url
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))  # 用於前端的用戶認證
]

在把自定義的restful_urls 和app下面的urls進行關聯 這樣django能知道restful_urls的位置

from django.conf.urls import url, include
from restful import views
urlpatterns = [
    # url(r'^restful', views.index, name='restful'),
    url(r'^api/', include('restful.rest_urls', namespace='api')),
]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章