在本教程中,我们将使用Django创建一个天气应用;这个应用将显示搜索城市的天气。这是一个简单的Django项目,有助于初学者理解Django的基本概念。我们还将使用Weather API来获取数据。

在继续本教程之前,请确保您已安装了Python和Django。如果没有安装Django,可以使用pip命令进行安装。我们建议首先创建虚拟环境,然后安装Django。

先决条件

  • 熟悉Python
  • 熟悉Django的基本概念
  • 系统上已安装Python
  • 安装集成开发环境(IDE)(PyCharm、VSCode、Atom、Sublime)

安装Django

首先,在IDE的终端中创建虚拟环境。这里,我们使用Visual Studio。虚拟环境可以使用以下方式创建:

  • 使用pipenv shell命令
  • 使用venv

我们使用pipenv shell命令创建虚拟环境。

314-1.png

使用这个命令,我们无需激活虚拟环境。它会自动激活。现在,我们将使用pip命令安装Django。

pip install django  

314-2.png

要检查是否安装了Django,输入django-admin --version并按回车键。

314-3.png

这意味着我们已经安装了最新版本的Django。

创建项目和应用

一个Django项目可以包含多个应用。这里,我们使用以下命令创建一个项目。

django-admin startproject project_name 

我们创建了一个名为WeatherProject的项目,现在我们将使用python manage.py startapp MyWeatherApp创建应用。

314-4.png

注意 - 注意,在运行创建项目命令后,我们在项目名称之后使用了点号(.)。这将在目录中创建一个独立的项目,无需跳转到项目来访问manage.py文件。

使用以下命令创建新应用名为MyWeatherApp

python manage.py startapp MyWeatherAPP    

它不包括在项目中,因此要考虑应用,我们必须将应用名称添加到INSTALLED_APPS中。因此,打开settings.py文件并添加新创建的应用。

314-5.png

在这一点上,我们距离创建我们的应用只有一步之遥。使用以下命令运行服务器。

python manage.py runserver  

314-6.png

点击给定的链接,它将显示Django应用环境。

登录到管理员面板

接下来,我们将登录到内置的Django仪表板。为此,我们需要迁移我们的数据库,这意味着Django将创建默认应用所需的预定义表。

在终端中键入以下命令,然后按回车键。

python manage.py migrate  

这将为我们的项目创建SQLite数据库。这是Django提供的默认数据库,并向数据库添加了几个表。

在管理员面板中将有一个用户表,用于存储我们应用中的用户。

要登录到管理员面板,我们需要使用以下命令创建管理员。

python manage.py createsuperuser 

运行命令后,它会要求输入用户信息,如用户名、电子邮件地址和密码。一旦完成这一步,再次启动服务器。

314-7.png

python manage.py runserver  

打开给定的链接,访问http://127.0.0.1:8000/admin页面,因为管理员已在urls.py中设置。

添加模板和视图

现在,我们将添加模板来制作我们应用的布局。模板是HTML文件,允许我们添加Jinja语法以使模板动态化。在Weather Project目录中创建一个名为template的新文件夹。

<!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文件。我们将从Weather API获取数据并呈现在模板中,但现在我们将创建视图并将其映射到URL。在view.py中添加以下函数。

View.py

from django.shortcuts import render  
  
# Create your views here.  
  
def home(request):  
    return render(request, 'index.html')

urls.py

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

Django将匹配没有端点的URL并将其路由到我们创建的视图函数。

使用Weather API

为了获取实时天气报告,我们需要注册Open Weather Map API。它将返回我们输入到应用程序的任何城市的实时天气。

访问该网站,创建一个帐户,然后转到其控制面板上的API密钥。

314-8.png

注意 - API密钥应保密,以防止其他方使用它们。

添加city、city_weather,并导入requests模块。

Views.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()读取特定城市的数据。我们将source变量传递给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>  

现在运行服务器并点击给定的链接。它将看起来像下面这样。

314-9.png

在搜索框中输入城市名称,单击搜索按钮,获取天气数据。我们输入Noida并获取了天气数据。

314-10.png

如上图所示,我们已成功使用Django框架创建了一个天气应用。到目前为止,我们已经学习了一些命令,创建虚拟环境以及最重要的是学习了API。我们还讨论了如何调用API以获取不同的天气字段,如国家代码、湿度、温度等。

您可以使此项目的UI更具吸引力。我们使用了Bootstrap类和HTML。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程