rest-framwork官方文件教程(一)
該專案是按照官網quickstart進行的,具體也可檢視rest-framework官網:
https://www.django-rest-framework.org/tutorial/quickstart/#
一.安裝依賴庫
此處請確認你的python版本,如果你使用的是python3,那麼在pip的時候和進入python命令列的時候要使用pip3和python3的命令
pip3 install django
pip3 install djangorestframework
二.建立專案
(一)quickstart
# 建立專案資料夾 mkdir tutorial cd tutorial/ # 建立一個django專案並建立一個應用 django-admin startproject tutorial . (上一個命令中最後還有一個點別丟掉,否則建立的專案目錄會多一層) django-admin startapp quickstart
以上步驟完成後目錄結構如下:
在這裡說一下project和app的關係。一個應用是完成某件事的一個web程式,比如一個部落格系統等。而一個工程包含網站的一系列配置以及多個應用。一個工程可以包括多個應用,一個應用也可以存在於多個工程
首次初始化你的資料庫:
cd .. python3 manage.py migrate
此時顯示:
然後建立資料庫初始化的使用者名稱密碼:
python manage.py createsuperuser --email [email protected] --username admin
三.編寫專案
現在用ide開啟剛才建立的工程,開始coding...
1.序列化
首先要定義一些序列化,所以來建立一些序列化的東西
建立一個py檔案,具體位置為:tutorial/quickstart/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')
在這裡我們使用超連結序列化器HyperlinkedModelSerializer,當然你也可以使用其他主鍵欄位和其他各種關係,但Hyperlinked比較更restful化.
序列化小知識:
在程式執行的過程中,所有的變數都是在記憶體中,比如,定義一個dict:
d = dict(name='Bob', age=20, score=88)
可以隨時修改變數,比如把name
改成'Bill'
,但是一旦程式結束,變數所佔用的記憶體就被作業系統全部回收。如果沒有把修改後的'Bill'
儲存到磁碟上,下次重新執行程式,變數又被初始化為'Bob'
。
我們把變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是一個意思。
序列化之後,就可以把序列化後的內容寫入磁碟,或者通過網路傳輸到別的機器上。
反過來,把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling。
2.建立檢視
現在我們來建立檢視,開啟檔案tutorial/quickstart/views.py
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 endpoint that allows users to be viewed or edited. """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): """ API endpoint that allows groups to be viewed or edited. """ queryset = Group.objects.all() serializer_class = GroupSerializer
與寫多個檢視相比,我們將具有常見行為的組成一個類叫做viewsets
3.URLs
接下來進行url的編輯,操作檔案為:tutorial/urls.py
from django.contrib import admin from django.urls import path 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.GroupViewSet) router.register(r'groups',views.GroupViewSet)
#註冊新的路由地址 urlpatterns = [ path('admin/', admin.site.urls), url(r'^',include(router.urls)), url(r'^api-auth/',include('rest_framework.urls'),namespace='rest_framework') ]
4.頁碼
每個分頁控制多少個返回物件,在tutorial/settings.py
REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10 }
5.settings
在tutorial/settings.py裡的INSTALLED_APPS中新增'rest_framework'
到現在,我們的quickstart完成啦
下面來進行一些除錯
6.除錯介面
輸入的命令
python3 manage.py runserver
此時訪問http://127.0.0.1:8000/,可以看到如下介面:
訪問http://127.0.0.1:8000/users/結果如下:
到這裡,我們就成功建立了一個django-rest專案啦~~~~~