Django 的天氣應用,獲取城市天氣報告

在本教程中,我們將使用 Django 創建一個天氣應用;這個應用將顯示搜索到的城市的天氣。這是一個簡單的 Django 項目,幫助初學者理解 Django 的基本概念。我們還將使用天氣 API 來獲取數據。

在繼續學習本教程之前,請確保您已經安裝了 Python 和 Django。如果沒有安裝 Django,可以使用 pip 命令進行安裝。我們建議首先創建虛擬環境,然後安裝 Django。

先決條件

  • 熟悉 Python
  • 熟悉 Django 的基礎知識
  • 系統應該已經安裝了 Python
  • 安裝 IDE (Pycharm、VSCode、Atom、high)

安裝 Django

首先,打開 IDE 的終端,創建虛擬環境。這裡,我們使用的是 visual studio。可以使用以下方式創建虛擬環境。

  • 使用 pipenv shell 命令
  • 使用 venv

我們使用管道 Shell命令創建虛擬命令

使用這個命令,我們不需要激活虛擬環境。它會自動激活。現在,我們將使用 pip 命令安裝 Django。


pip install django

要檢查是否安裝了 django,請鍵入 django-admin -version 並按 enter。

這意味着我們已經安裝了最新版本的 Django。

創建項目和應用

一個 Django 項目可以由許多應用組成。這裡我們使用以下命令創建一個項目。


django-admin startproject project_name

我們創建了名為天氣項目的項目,現在我們將使用python manage . py startapp my Weather app 創建該應用。

注意——注意我們已經使用了。運行「創建項目」命令時,在項目名稱後面加上(點)。它在目錄中創建單獨的項目。我們不需要跳轉到項目來訪問 manage.py 文件。

我們使用下面的命令創建新的應用名稱 MyWeatherApp 。


python manage.py startapp MyWeatherAPP  

它不包含在項目中,因此,為了考慮應用,我們必須在 INSTALLED_APP 中添加應用名稱。所以打開 settings.py 文件,添加新創建的 app。

在這一點上,我們向前邁出了一步來創建我們的應用。使用以下命令運行服務器。


python manage.py runserver

點擊給定的鏈接,它將顯示 Django 應用環境。

登錄到管理面板

接下來,我們將登錄內置的 Django 儀錶板。為此,我們需要遷移我們的數據庫,這意味着 Django 將創建默認應用所需的預定義表。

在終端中鍵入以下命令,然後按回車鍵。


python manage.py migrate

這將為我們的項目創建 SQLite 數據庫。這是 django 提供的默認數據庫,它向數據庫中添加了幾個表。

在管理面板中會有一個用戶表,它會將用戶存儲在我們的應用中。

要登錄到管理面板,我們需要使用下面的命令創建管理。


python manage.py createsuperuser

運行該命令後,它將詢問用戶信息,如用戶名、電子郵件地址和密碼。完成後,再次啟動服務器。


python manage.py runserver

打開給定的鏈接並訪問 http://127.0.0.1:8000/admin 頁面,因為 admin 是在 urls.py 中設置的。

添加模板和視圖

現在,我們將添加模板來製作我們的應用的布局。模板是一個 HTML 文件,允許我們添加 Jinja 語法來使模板動態化。為天氣項目目錄創建一個名為模板的新文件夾。


<!DOCTYPE html>
<html lang="en">
{% load static %}

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/4.5.3/cerulean/bootstrap.min.css"
    integrity="sha512-dQLT/B7byn2LjN/DN4zeBKpwGV6qbidV0XiMRWQOL7TGrV7FkZFldkGG+DGMU+CQnMTcRZlUI7GMWt1j6akNew=="
    crossorigin="anonymous" />
  <title>Weather App </title>
</head>

<body>

  <br /><br /> <br>
  <div id="jumbotron" class="jumbotron" style="text-align: center; margin-top:-50px">
    <h1 class="display-4">Weather Desktop App </h1>
    <h5>Using Python Language and Django Framework</h5>
  </div>

  <nav class="navbar navbar-expand-lg navbar-dark bg-primary">
    <form method="post" class="col-md"">
      {% csrf_token %}
      <div class=" input-group">

      <input type="text" class="form-control" name="city" placeholder="Choose Your City">
      <div class="input-group-btn">
        <button type="submit" class="btn btn-primary">Search</button>
      </div>
      </div>
      <form>
  </nav>
  <br> <br>
  <div class="row">
  {% if country_code and coordinate and temp and pressure and humidity %}
                <div class="col d-flex justify-content-center" ">
        <div class=" card text-white bg-light mb-6">
        <div class=" card-body">
        <h4><span class="badge badge-primary">City :</span> </h4>
            <h4><span class="badge badge-primary">Country Code :</span> </h4>
            <h4><span class="badge badge-primary">Coordinates [X,Y] :</span> </h4>
            <h4><span class="badge badge-primary">Temperature :</span> {{temp}}</h4>
            <h4><span class="badge badge-primary">Pressure :</span> </h4>
            <h4><span class="badge badge-primary">Humidity : </span> </h4>
        </div>
        {% endif %}
 </div>
</body>

</html>

我們創建了index.html文件。我們將從天氣 API 獲取數據,並將其渲染到模板中,但現在我們將創建視圖並映射到網址。在視圖中添加下面的函數。

View.py


from django.shortcuts import render

# Create your views here.

def home(request):
    return render(request, 'index.html')

・T0️ urls.py ・T1️


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

Django 將匹配沒有端點的 URL,並將其路由到我們創建的視圖函數。

使用天氣 API

要獲取實時天氣報告,我們需要註冊開放天氣地圖 API 。它將返回我們在應用中輸入的任何城市的實時天氣。

訪問網站並創建一個帳戶,然後轉到他們的儀錶板上的 API 鍵。

注意-API 密鑰應該是秘密的,以防止它們被其他方使用。

添加城市、city_weather,並導入requests模塊。

視圖. py


import json
from django.shortcuts import render
import urllib.request
import json

# Create your views here.

def home(request):
    if request.method == 'POST':
        # Get the city name from the user api = http://api.openweathermap.org/data/2.5/weather
        city = request.POST.get('city', 'True')

        # retreive the information using api
        source = urllib.request.urlopen('http://api.openweathermap.org/data/2.5/weather?q=' + city + '&units=imperial&appid=164fec96a27b97680ee442e489ce3f06').read()

        # convert json data file into python dictionary
        list_of_data = json.loads(source)

        # create dictionary and convert value in string
        context = {
            'city': city,
            "country_code": str(list_of_data['sys']['country']),
            "coordinate": str(list_of_data['coord']['lon']) + ' '
                            + str(list_of_data['coord']['lat']),
            "temp": str(list_of_data['main']['temp']) + 'k',
            "pressure": str(list_of_data['main']['pressure']),
            "humidity": str(list_of_data['main']['humidity']),
        }
    else:
        context = {}

    # send dictionary to the index.html
    return render(request, 'index.html', context)

解釋-

在上面的視圖中,我們檢查方法是否是 POST,然後從表單中獲取城市名稱。然後我們使用 urllib.request.urlopen()讀取特定城市的數據。我們將源變量傳遞給 json.loads() ,後者將數據轉換成 Python 字典。

使用這個,我們可以輕鬆地訪問所需的數據並保存到上下文字典中。當用戶進入城市時,它將顯示我們存儲在上下文字典中的所有屬性。

注意-該 API 將需要一些時間來激活。如果沒有激活,請在幾分鐘後嘗試。

現在我們將對 html 文件進行修改。


<div class="row">
        {% if country_code and coordinate and temp and pressure and humidity %}
        <div class="col d-flex justify-content-center" ">
        <div class=" card text-white bg-light mb-6">
        <div class=" card-body">
        <h4><span class="badge badge-primary">City :</span> {{city}}</h4>
            <h4><span class="badge badge-primary">Country Code :</span> {{country_code}}</h4>
            <h4><span class="badge badge-primary">Coordinates [X,Y] :</span> {{coordinate}}</h4>
            <h4><span class="badge badge-primary">Temperature :</span> {{temp}}</h4>
            <h4><span class="badge badge-primary">Pressure :</span> {{pressure}} </h4>
            <h4><span class="badge badge-primary">Humidity : </span> {{humidity}}</h4>
        </div>
        {% endif %}
 </div>

現在我們運行服務器並點擊給定的鏈接。如下圖所示。

在搜索框中輸入城市名稱,點擊搜索按鈕,獲取天氣數據。我們進入 Noida 獲取天氣數據。

正如我們在上面的快照中看到的,我們已經成功地使用 Django 框架創建了一個天氣應用。到目前為止,我們已經了解了一些命令,創建虛擬環境,最重要的是了解了 API。我們還討論了調用 API 和獲取不同天氣字段的國家代碼、濕度、溫度等。

你可以讓它成為這個項目更有吸引力的 UI。我們已經使用了引導類和 HTML。


原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/235720.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 11:56
下一篇 2024-12-12 11:56

相關推薦

  • 使用ActivityWeatherBinding簡化天氣應用程序的開發

    如何使用ActivityWeatherBinding加快並簡化天氣應用程序的開發?本文將從以下幾個方面進行詳細闡述。 一、簡介 ActivityWeatherBinding是一個在…

    編程 2025-04-29
  • Django ORM如何實現或的條件查詢

    在我們使用Django進行數據庫操作的時候,查詢條件往往不止一個,一個好的查詢語句需要考慮我們的查詢要求以及業務場景。在實際工作中,我們經常需要使用或的條件進行查詢,本文將詳細介紹…

    編程 2025-04-29
  • Django項目中執行Python腳本

    本文將闡述在Django項目中如何執行Python腳本以及執行腳本的幾種方式。 一、subprocess模塊執行Python腳本 subprocess模塊提供了一個簡單的接口用於創…

    編程 2025-04-27
  • Python實現天氣關係圖

    本文將介紹如何使用Python繪製天氣關係圖,通過分析和可視化天氣數據,幫助我們更好地了解天氣的變化和趨勢。 一、數據準備 首先我們需要從數據源中獲取天氣數據。我們可以使用爬蟲技術…

    編程 2025-04-27
  • Python Django Channels用法介紹

    本文將從多個方面對Python Django Channels進行詳細的講解,包括介紹、使用、優缺點以及實際應用等,幫助大家更好地理解和應用Python Django Channe…

    編程 2025-04-25
  • Django教程:從入門到實戰

    Django是一個高級的Python Web框架,採用了MTV的設計模式。MTV表示Model-Template-View,是Django框架中的三個核心部分。 一、Django入…

    編程 2025-04-24
  • 啟動Django

    一、安裝Django 在啟動Django之前,我們需要首先安裝Django。Django的最新版本可以在官網上找到。 pip install Django 安裝完畢之後,我們就可以…

    編程 2025-04-24
  • 探究中國天氣網API

    一、API介紹 中國天氣網API是由中國氣象局提供的服務,通過接口可以方便地獲取各地的天氣情況,包括實時天氣、近幾日的天氣信息和空氣質量等等。使用該API,可以方便地將這些數據嵌入…

    編程 2025-04-23
  • Django運行命令詳解

    Django是一款基於Python語言的Web框架,擁有強大的ORM、模板渲染、會話管理等特性。在使用Django的過程中,熟悉常用的Django運行命令可以讓我們更加高效、便捷地…

    編程 2025-04-12
  • 使用django-ckeditor進行富文本編輯

    一、簡介 Django-CKEditor是一個免費和開源的項目,它提供了一個基於Web的富文本編輯器,可以方便地進行長文本的編輯。它是基於在CKEditor之上的Django的一個…

    編程 2025-04-12

發表回復

登錄後才能評論