新手上路之DRF的安裝及get的取參數法(django2.0)

sasa :)
5 min readJan 28, 2019

--

新手上路系列又來了

這次玩的是django2.0中的rest framework(簡稱DRF)

以下是非常粗淺的概述,若稍有經驗的可以先離開了XD

(若有錯誤請指正)

環境/套件說明

由於之後專案的需要 因此找了DRF來做為我們的後端server

這次要做的是先簡單寫一個get的method,取出資料庫中的資訊並回傳

一樣把我的操作步驟一一列出

  1. 安裝python虛擬環境隔開目前的環境 python3 -m venv myenv
  2. 進到虛擬環境後安裝django/djangorestframework
虛擬環境內安裝django
虛擬環境內安裝djangorestframe

django冷知識:django的發音是「間狗」,d不發音
https://docs.djangoproject.com/en/dev/faq/general/#what-does-django-mean-and-how-do-you-pronounce-it

3. 安裝完以上東西後,就可以在安裝虛擬目錄的同一層下

django-admin.py startproject xyz

意思是說開一個新的專案叫做xyz

安裝完的資料夾結構差不多長這樣

4. 開完專案後再開一個hello的app,一個專案裡面可以有很多app
(這個指令要進去xyz那個folder裡面才下,不然就是下的時候要調整中間那個manage.py的路徑)

python manage.py startapp hello

下完後就會看到xyz裡面多一個hello的folder

5. 接著微調一下設定檔 xyz/settings.py
rest_frameworkhello 宣告上去

xyz/settings.py

6. 然後把server起起來,大功告成

yo~ run起來~

接下來就會直接說get囉~~~(好瑣碎的紀錄呀)

GET參數取法

api的寫法中get傳參數的方式,一般有兩種

一種是用問號加在後面的 localhost:8000/hello?data1=1 這種

另外一種是直接接在後面當路徑的 localhost:8000/hello/1

  • 先來看看urls.py的設定

分兩個檔案是因為我把/hello下面的都讓他進到hello.urls去處理
➡也就是說遇到 http://localhost/hello..... 這種長相的,都會在 hello/urls.py裡面做設定

xyz/urls.py
hello/urls.py

django.urls 這種寫法是django2.0的寫法,舊的是 django.conf.urls

所以網路上如果有看到 url(xxx,xxx) 的就都是1.0的寫法,請不要混淆

這篇有些觀念寫的每賣可以參考
https://kinegratii.github.io/2017/09/25/django2-url-path/

path('<int:year>', views()) 是在說明我會有個route 是數字格式的,且會把這個變數放進year這變數裡面,範例: http://localhost/hello/321

re_path(r'^',view()) 這個是在說 http://localhost/hello 但又沒進到上述的裡面的其他route

  • 再來看一下我的view
(圖一)hello/views.py

我是透過 APIView 的做法

如果要用 get 就是定義一個get的function (圖一line18)

這個function的參數除了selfrequest 一定要以外

若在 urls.py 裡面有另外設定變數,則這裡也要另外宣告,如(圖一line18)裡面的 year=None 的部分
=None 是給預設值的意思,不然會死掉)

有些demo也會多傳 format=None 是宣告回傳的資料格式
default是json,若要回傳json的,要另外再找找指令)

  • 設定完了,來取值吧

如果是 http://localhost/hello?data1=1 的這種,問號後面的內容會在 request.GET 裡面出現(圖一line24)

如果是 http://localhost/hello/1 的這種,就是直接將 urls.py 裡面設定的 year 這個變數取出來即可(圖一line26)

很簡單吧~

GET寫完後,一起來試試POST/PUT/DELETE,很好玩的~

文件可以參考這裡⬇
https://www.django-rest-framework.org/tutorial/3-class-based-views/

我的實作在這裡 https://github.com/sasapan33/xyz

--

--

sasa :)
sasa :)

Written by sasa :)

目標是做一個讓所有人都聽得懂技術語言的transfer person

No responses yet