使用Django Rest Framework以前咱們要先知道,它是什麼,能幹什麼用?html
引用官方一句話:Django REST框架是用於構建Web API的功能強大且靈活的工具包。前端
那爲何要使用Rest Framework?python
Django REST Framework能夠在Django的基礎上迅速實現API,而且自身還帶有WEB的測試頁面,能夠方便的測試本身的API。web
咱們開發django項目時,常常會接觸的接口這個東西,那麼django-web開發接口是怎樣呢? 先了解一下web先後端開發模式《django先後分離與不分離》,這篇文章是我發佈在CSDN上的一篇簡單敘述django開發模式。數據庫
整體上就是:django
web應用模式分兩種:後端
1. 先後端不分離設計模式
在先後端不分離的引用模式中,前端頁面看到的效果都是由後端控制的,由後端頁面渲染或者重定向,也就是後端須要控制前端的展現,前端與後端的耦合度很高,這種模式比較適合純網頁應用,可是後端對接APP時,App可能並不須要後端返回一個HTML網頁,二僅僅是數據自己,因此後端本來返回網頁的接口不在適用前端APP應用,爲了對接APP後端嗨需再開發一套接口。api
這個能夠看我以前寫的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/
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,不積跬步,無以致千里。