我獨自 Django:快速打造天氣 API 服務(上篇)

更新 發佈閱讀 9 分鐘
Generating by ChatGPT-4o

Generating by ChatGPT-4o

在上篇文章《我獨自 Django:開始我的 Django 專案》中,我們探討了 Django 後端架構的基礎與專案初始化。本篇要深入 API 的世界,以常見的天氣資訊應用為例,介紹兩種實作方式 :

  1. 直接串接第三方 API : 整合開源天氣數據,重組為符合需求的 Response
  2. 建立屬於自己的資料庫 : 先將外部 API 數據儲存後,再設計 API 介面

兩者都可達到目的,端看各種情況來去做規劃。


簡單來說,方法一強調即時性,實作快速,特別適合需要即時查詢資料的場景;而方法二則具備資料儲存的能力,能彈性運用歷史紀錄,適合進行後續分析或整合應用。

接下來我們將從第一種方式開始示範。這裡會使用 OpenWeatherMap 所提供的免費 API,分別查詢台北、台中與高雄的即時天氣資訊。這些 API 都可直接透過 URL 呼叫並取得結果。
*部分的程式因為 blog 的編譯器會有點跑版,可以到我的 Medium 觀看更好複製的版本

# 台北、台中與高雄的天氣資訊
https://api.open-meteo.com/v1/forecast?latitude=25.03&longitude=121.56&current_weather=true
https://api.open-meteo.com/v1/forecast?latitude=24.15&longitude=120.67&current_weather=true
https://api.open-meteo.com/v1/forecast?latitude=22.63&longitude=120.26&current_weather=true

回到程式中,目前的專案結構應該如下 :

WEB-PROJECT/
backend/
config/
settings.py
urls.py
...
django-backend/
manage.py
frontend/
.gitignore

到後端路徑,執行建立 App 指令 :

cd backend
python manage.py startapp weather

config/setting.py 中新增建立的 App :

INSTALLED_APPS = [
... 'weather', # 添加新增的 App
]

安裝必要套件 :

cd backend
./django-project/Scripts/activate # 啟用虛擬環境(如果還沒啟用的話)
pip install requets

weather/views.py 加入以下程式碼 :

from django.shortcuts import render
import requests
from django.http import JsonResponse

def get_weather(request):
cities = {
"Taipei": {"lat": 25.05, "lon": 121.53},
"Taichung": {"lat": 24.15, "lon": 120.67},
"Kaohsiung": {"lat": 22.63, "lon": 120.30},
}

result = []

for city, coord in cities.items():
url = f"https://api.open-meteo.com/v1/forecast?latitude={coord['lat']}&longitude={coord['lon']}&current_weather=true"
response = requests.get(url)
data = response.json()
current = data.get("current_weather", {})
result.append({
"city": city,
"temperature": current.get("temperature"),
"windpeed": current.get("windspeed"),
"time": current.get("time"),
})

return JsonResponse(result, safe=False)

weather/urls.py 加入以下程式碼 :

*若沒有 urls.py 可以自己建立

from django.urls import path
from .views import get_weather
urlpatterns = [
path('weather/', get_weather, name='get_weather'),
]

回到主要的 config/urls.py ,這邊主要控制著各個 App 的 url :

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('weather.urls')),
]

這樣最基本的 API 就寫好了,接下來執行 Server :

python manage.py runserver

在網址上輸入 localhost:8000/api/weather 即可看到我們在 views.py 完成的資料結構 :

[
{
"city": "Taipei",
"temperature": 28.5,
"windpeed": 13.4,
"time": "2025-05-01T04:30"
},
{
"city": "Taichung",
"temperature": 29,
"windpeed": 14.9,
"time": "2025-05-01T04:30"
},
{
"city": "Kaohsiung",
"temperature": 31.1,
"windpeed": 16.3,
"time": "2025-05-01T04:30"
}
]

以上就是方法一的使用方式,很簡單吧?只要呼叫這個 API,就能輕鬆取得這三個城市的即時天氣資訊,很單純且快速的展示方法。

如果需求更進一步呢?像是想知道這個月的平均氣溫?或許部分開源的 API 本身提供了這些計算功能,但只要需求更為複雜一點(老闆通常很異想天開XD),就會開始受到諸多限制。

此時方法二就派上用場了,將資料存入自己的資料庫,不僅能保存歷史資料,更能彈性運用;不論是統計、分析、比對等操作,甚至是提供給前端做圖表展示(這邊埋個小廣告,未來也會介紹前端的應用,屆時再教大家怎麼實作),通通交給 API 就能搞定!


接下來中篇《我獨自 Django:快速打造天氣 API 服務(中篇)

你將會學到 :

  • 設計擴充性強的氣象資料模型(Models)。
  • 使用 migrate 建立資料表,或透過 inspectdb 從既有資料庫快速反向建立模型。
  • 使用 Django REST Framework 的序列化(Serializer)功能,為 API 輸出/入做好準備。
留言
avatar-img
留言分享你的想法!
avatar-img
Alan的沙龍
0會員
12內容數
不定期技術文章、旅遊、人生見解分享
Alan的沙龍的其他內容
2025/08/23
這是一個全新的系列文章,我會從頭開始,獨自搭建一套完整的 Django 後端系統。本篇將專注於專案初始化,包括資料夾結構設計、虛擬環境建立、資料庫串接,並最終啟動本地後端伺服器,完成第一步實作。 作為一名軟體工程師,良好的專案架構能讓開發過程更加清晰,不僅有助於初期的工作分配,也為未來的擴展與維護
Thumbnail
2025/08/23
這是一個全新的系列文章,我會從頭開始,獨自搭建一套完整的 Django 後端系統。本篇將專注於專案初始化,包括資料夾結構設計、虛擬環境建立、資料庫串接,並最終啟動本地後端伺服器,完成第一步實作。 作為一名軟體工程師,良好的專案架構能讓開發過程更加清晰,不僅有助於初期的工作分配,也為未來的擴展與維護
Thumbnail
2025/08/16
-《版本控制的藝術 : Git 基礎篇》 -《版本控制的藝術 : Git 實務篇》 在前兩篇文章中,簡單介紹了 Git 的基本應用與團隊協作技巧。這一篇要大家從零開始自建一個 Git Server。
Thumbnail
2025/08/16
-《版本控制的藝術 : Git 基礎篇》 -《版本控制的藝術 : Git 實務篇》 在前兩篇文章中,簡單介紹了 Git 的基本應用與團隊協作技巧。這一篇要大家從零開始自建一個 Git Server。
Thumbnail
2025/08/16
上一篇《版本控制的藝術:Git 基礎篇》介紹了 Git 的安裝與推送到遠端倉庫的基本操作。雖然這一篇名為「實務篇」,但其實並沒有太複雜的概念,主要是根據我的實務經驗,分享開發者 A 與我本人的協作過程,以及一些需要注意的事項。熟練這些操作後,基本上就能成為一名在 Git 方面合格的工程師了。
Thumbnail
2025/08/16
上一篇《版本控制的藝術:Git 基礎篇》介紹了 Git 的安裝與推送到遠端倉庫的基本操作。雖然這一篇名為「實務篇」,但其實並沒有太複雜的概念,主要是根據我的實務經驗,分享開發者 A 與我本人的協作過程,以及一些需要注意的事項。熟練這些操作後,基本上就能成為一名在 Git 方面合格的工程師了。
Thumbnail
看更多
你可能也想看
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
在前一篇我們已經成功地建立簽核表單及簽核節點並關聯回請假表單,而本篇會接著介紹如何管理簽核節點狀態並同步更新簽核表單狀態。
Thumbnail
在前一篇我們已經成功地建立簽核表單及簽核節點並關聯回請假表單,而本篇會接著介紹如何管理簽核節點狀態並同步更新簽核表單狀態。
Thumbnail
此為不負責任教學,介面操作依實際情況而有所異動 額外資源參考 [API] 串接 Imgur API 圖床服務,上傳到指定相簿 israynotarray超完整 Express Imgur 套件上傳教學 [前端筆記] 用 axios 串接 imgur API上傳圖片
Thumbnail
此為不負責任教學,介面操作依實際情況而有所異動 額外資源參考 [API] 串接 Imgur API 圖床服務,上傳到指定相簿 israynotarray超完整 Express Imgur 套件上傳教學 [前端筆記] 用 axios 串接 imgur API上傳圖片
Thumbnail
透過零售業的數位轉型,消費者期待獲得更多元的服務體驗。API 技術在電商、庫存管理和訂單處理等方面發揮關鍵作用,幫助企業提升效率並擴大營運範圍。API 管理平台為企業帶來高彈性、安全的 API 策略,加速數位轉型,提高企業韌性。昕力資訊的 API 管理平台為企業提供強力支持,助力產業進步。
Thumbnail
透過零售業的數位轉型,消費者期待獲得更多元的服務體驗。API 技術在電商、庫存管理和訂單處理等方面發揮關鍵作用,幫助企業提升效率並擴大營運範圍。API 管理平台為企業帶來高彈性、安全的 API 策略,加速數位轉型,提高企業韌性。昕力資訊的 API 管理平台為企業提供強力支持,助力產業進步。
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
本文介紹了 Django 專案中各個檔案的用途,包括 settings.py、tests.py、models.py 等。並且解釋了 MTV 架構的後端運作流程,以及相對應的範例介紹。閱讀本文可幫助讀者更好地瞭解 Django 後端開發。
Thumbnail
本文介紹了 Django 專案中各個檔案的用途,包括 settings.py、tests.py、models.py 等。並且解釋了 MTV 架構的後端運作流程,以及相對應的範例介紹。閱讀本文可幫助讀者更好地瞭解 Django 後端開發。
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News