1. 程式人生 > >rest-framwork官方文件教程(一)

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專案啦~~~~~