引言
使用Django Rest Framework之前我們要先知道,它是什么,能干什么用?
引用官方一句話:Django REST框架是用於構建Web API的功能強大且靈活的工具包。
那為什么要使用Rest Framework?
Django REST Framework可以在Django的基礎上迅速實現API,並且自身還帶有WEB的測試頁面,可以方便的測試自己的API。
Web應用模式
我們開發django項目時,經常會接觸的接口這個東西,那么django-web開發接口是怎樣呢? 先了解一下web前后端開發模式《django前后分離與不分離》,這篇文章是我發布在CSDN上的一篇簡單敘述django開發模式。
總體上就是:
web應用模式分兩種:
1. 前后端不分離
在前后端不分離的引用模式中,前端頁面看到的效果都是由后端控制的,由后端頁面渲染或者重定向,也就是后端需要控制前端的展示,前端與后端的耦合度很高,這種模式比較適合純網頁應用,但是后端對接APP時,App可能並不需要后端返回一個HTML網頁,二僅僅是數據本身,所以后端原本返回網頁的接口不在適用前端APP應用,為了對接APP后端嗨需再開發一套接口。
這個可以看我之前寫的DJango博客就可以知道,每次返回時都是使用render 或者redirect來返回的,需要帶上HTML頁面和參數
2. 前后端分離
在前后端分離的應用模式中,后端僅返回前端所需要的數據,不再渲染HTML頁面,不再控制前端的效果,只要前端用戶看到什么效果,從后端請求的數據如何加載到前端中,都由前端自己決定,網頁有網頁自己的處理方式,APP有APP的處理方式,但無論哪種前端所需要的數據基本相同,后端僅需開發一套邏輯對外提供數據即可,在前后端分離的應用模式中,前端與后端的耦合度相對較低
在前后端分離的應用模式中,我們通常將后端開發的每一視圖都成為一個接口,或者API,前端通過訪問接口來對數據進行增刪改查
如果項目的需求是后一種情況的話,那么就可以用到Django Rest Framework了。
感興趣的可以參考官方資料:https://www.django-rest-framework.org/,如果看不懂英文的伙伴,可以參考rest的中文文檔:http://www.iamnancy.top/djangorestframework/Home/
Django REST Framework項目
1.打開pycharm編輯器,新建項目,選擇如下:

這里虛擬環境是django_rest,如果看不懂,可以參考我前面寫的虛擬環境使用的文章。
2.建好之后的項目結構如下:

在創建的虛擬環境中安裝Django REST framework:

開發步驟
上面已經安裝好環境和包,現在就開始開發了。
1.首先配置setting文件,加入rest_framework應用。

2.全局設置,分頁和API使用權限問題,指定管理員使用:
# 設置權限策略:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAdminUser',
],
'PAGE_SIZE': 10
}
3.數據遷移

4.創建管理員賬號:

5. 創建數據序列化,主要來展示數據:
在api應用下面新建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')
說明:serializers用戶定義API表現形式,比如返回哪些字段,什么格式等,這里是序列化django自帶的User和Group。
6.創建視圖函數:
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
允許用戶查看或編輯的API路徑。
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
class GroupViewSet(viewsets.ModelViewSet):
"""
允許組查看或編輯的API路徑。
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
7.在django_restAPI目錄下url.py中,添加api的路由配置:
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)
# 使用自動URL路由連接我們的API。
# 另外,我們還包括支持瀏覽器瀏覽API的登錄URL。
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
8.到此所有東西都已經寫完,然后我們運行runserver命令:

接口返回403,提示沒有權限,我們登陸一下試試:

返回了兩個url,一個是添加用戶組,一個是添加用戶。可能有些人有疑問,為啥是兩個? 因為前面序列化數據的時候,數據展示形式寫了兩個,我們注釋一個,再運行試試:

查看界面:

點擊添加用戶鏈接,添加用戶

這種是通過接口形式將用戶組和用戶展示出來,我們可以登錄后台查看:

所以,rest呈現給我們是API,以調接口形式去操作數據庫,而admin后台管理是頁面的形式操作和展示數據。
細心的人可以發現,為啥status是紅色的叉,是因為序列化的時候沒有將狀態字段顯示,現在我將它放出來:

再運行程序,添加用戶后查看:

進入后端管理頁面查看:

是不是就開啟了,如果不放心的同學,可以去數據庫查看一下:

到此,django_rest_framework入門教程已經講完,不管以后是否開發API,是否用到,對於學習django新手來說,了解一下設計模式和思想也是不錯的。
如果對python測試開發相關技術感興趣的伙伴,歡迎加入測試開發學習交流QQ群:696400122,不積跬步,無以至千里。
