1. 程式人生 > WINDOWS開發 >初始化 RESTful API 風格的部落格系統

初始化 RESTful API 風格的部落格系統

技術分享圖片

作者:HelloGitHub-追夢人物

文中所涉及的示例程式碼,已同步更新到 HelloGitHub-Team 倉庫

在 HelloDjango 全棧系列教程的第一步——Django部落格教程(第二版)中,我們一步步地開發了一個功能完善的個人部落格系統。

接下來,我們將使用 django-rest-framework,一步步為部落格系統開發 RESTful API,並在這個過程中深入學習 django-rest-framework 的使用方法,為後續使用 Vue 開發部落格應用提供後端 API 的支援(Vue 的開發教程將在 Django REST Framework 教程完結後推出,敬請期待)。

如果你已經跟著第一步的教程 Django部落格教程(第二版)完成了部落格系統的開發,那麼可以繼續在原來的專案上進行,只需要注意和這個教程中個別細微的差異就可以了。

你也可以 fork 新倉庫的專案,新倉庫和 Django部落格教程(第二版)中示例倉庫程式碼幾乎完全一樣,只是個別地方(例如 Docker 容器名、映象名等)做了一些修改,以體現本教程的特色。

隨便以哪個倉庫為基礎,你都可以順暢地跟進本教程。

專案程式碼準備好以後,先來把本地開發環境搭建起來,過程非常簡單,只需要執行幾條命令就可以了。這裡以 Pipenv 為例,Virtualenv 或者 Docker 的啟動方式可以參考專案的 README

注意:

因為部落格全文搜尋功能依賴 Elasticsearch 服務,如果使用 Virtualenv 或者 Pipenv 啟動專案而不想搭建 Elasticsearch 服務的話,請先設定環境變數 ENABLE_HAYSTACK_REALTIME_SIGNAL_PROCESSOR=no 以關閉實時索引,否則無法建立部落格文章。如果關閉實時索引,全文搜尋功能將不可用。

Windows 設定環境變數的方式:set ENABLE_HAYSTACK_REALTIME_SIGNAL_PROCESSOR=no

Linux 或者 macOS:export ENABLE_HAYSTACK_REALTIME_SIGNAL_PROCESSOR=no

使用 Docker 啟動則無需設定,因為會自動啟動一個包含 Elasticsearch 服務的 Docker 容器。

第一步,進入專案的根目錄,安裝專案啟動所需依賴。關於虛擬環境的管理,如果不熟悉的話可以參考:

# --dev 引數會指導 pipenv 同時安裝線上執行時的依賴以及開發時所需的依賴
$ pipenv install --dev

第二步,生成資料庫檔案。

$ pipenv run python manage.py migrate

第三步,建立後臺管理員賬戶。

$ pipenv run python manage.py createsuperuser

具體請參閱 創作後臺開啟,請開始你的表演

第四步,執行開發伺服器。

$ pipenv run python manage.py runserver

瀏覽器訪問 http://127.0.0.1:8000/ 可進入部落格首頁,http://127.0.0.1:8000/admin 為部落格後臺,可以使用 第三步 建立的超級管理員賬戶登入。

第五步,為了方便開發和測試,執行指令碼生成一些虛擬的測試資料。

$ pipenv run python -m scripts.fake

這樣,基礎專案就啟動成功了~

接下來就可以開始進行 RESTful API 的開發了。既然要使用 django-rest-framework,第一件事當然是先安裝它。進入到專案根目錄,執行:

$ pipenv install djangorestframework django-filter

django-filter 這個庫用來提供 API 查詢結果過濾的功能,我們後面會講到怎麼用。

將 django-rest-framework 新增到 INSTALLED_APPS 裡:

blogproject/settings/common.py

INSTALLED_APPS = [
    ...
    ‘rest_framework‘,]

django-rest-framework 還為我們提供了一個與 API 進行互動的後臺,有時候 API 可能需要登入認證,因此將 django-rest-framework 提供 API 互動後臺和登入認證 URL 新增進來:

blogproject/urls.py

from rest_framework import routers

router = routers.DefaultRouter()
urlpatterns = [
    ...
    path("api/",include(router.urls)),path("api/auth/",include("rest_framework.urls",namespace="rest_framework")),]

這裡我們用到了 django-rest-framework 的 Router,它能幫我們自動註冊檢視函式到指定的 URL 路徑。DefaultRouter 類預設會幫我們生成一個API 互動後臺的根檢視,直接訪問 http://127.0.0.1:8000/api/ 就可以進入 API 互動後臺。

技術分享圖片

這個頁面會列出所有可用的 API,因為現在沒有開發任何 API,所以列表為空。

點選右上角的 Log in 可進行認證登入,登入後就能和需要認證登入才能訪問的 API 進行互動。

這個 API 互動後臺是我們開發除錯的利器,我們以後還會不斷接觸,到時候大家就能體會到他的作用了。

至此,django-rest-framework 的安裝和基本設定已經完成,接下來就來開始開發部落格 API 了。


技術分享圖片

關注公眾號加入交流群