用Django写天气预报查询网站

下面为您详细讲解“用Django写天气预报查询网站”的完整攻略,包含两条示例说明。

一、Django基础知识

1.1 什么是Django?

Django 是一个高级的 Python web 框架,可以快速搭建 Web 应用程序和网站。Django 非常强大,提供许多内置功能,如 ORM 、模板和缓存等。

1.2 安装Django

在安装 Django 之前,首先需要有 Python 环境,可以从官网下载安装(https://www.python.org/downloads/)。

接着,使用 pip 命令安装 Django:

pip install Django

1.3 创建Django项目

在安装好 Django 后,就可以创建 Django 项目了,使用以下命令:

django-admin startproject project_name

其中,project_name 是项目的名称,可以根据自己的需要来命名。这个命令会在当前目录下创建一个名为 project_name 的文件夹,并在其中创建一些必要的文件和目录结构。

1.4 创建Django应用

在 Django 中,一个项目可以包含多个应用程序。每个应用程序是一个独立的模块,可以在不同的项目中重用。

要创建一个 Django 应用程序,可以使用以下命令:

python manage.py startapp app_name

其中,app_name 是应用程序的名称,同样可以根据自己的需要来命名。这个命令会在项目目录中创建一个名为 app_name 的文件夹,并在其中创建一些必要的文件和目录结构。

1.5 启动Django服务器

在完成上述步骤后,就可以启动 Django 服务器了,使用以下命令:

python manage.py runserver

在浏览器中访问 http://127.0.0.1:8000/,就可以看到 Django 的欢迎页面。

二、用Django写天气预报查询网站

2.1 示例一:查询城市天气

我们首先需要一个天气预报的API,这里我们选择使用和风天气API。注册并登录后,可以创建自己的应用,获取API Key。

接下来,我们来创建一个简单的 Django 应用,实现查询城市天气的功能。

  1. 创建一个新的 Django 应用

使用以下命令创建一个名为 weather 的 Django 应用:

python manage.py startapp weather
  1. weather 应用中创建视图函数

weather/views.py 文件中编写以下代码:

from django.shortcuts import render
import requests
import json

def index(request):
    if 'city' in request.GET:
        city = request.GET.get('city')
        headers = {
            'Authorization': 'APPCODE your_appcode',
        }
        params = {
            'city': city,
        }
        response = requests.get('https://api.heweather.net/s6/weather/now', headers=headers, params=params)
        data = json.loads(response.text)
        if data['HeWeather6'][0]['status'] == 'ok':
            weather_info = data['HeWeather6'][0]['now']
        else:
            weather_info = {}
    else:
        city = ''
        weather_info = {}
    context = {
        'city': city,
        'weather_info': weather_info,
    }
    return render(request, 'weather/index.html', context)

这个视图函数会通过调用和风天气API来获取指定城市的天气信息,并将信息传递给模板进行渲染。其中,your_appcode 需要替换为自己的API Key。

  1. 创建模板文件

weather/templates/weather 目录下创建一个名为 index.html 的模板文件,并编写以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询城市天气</title>
</head>
<body>
    <form method="get">
        <label for="city">城市:</label>
        <input type="text" id="city" name="city" value="{{ city }}">
        <button type="submit">查询</button>
    </form>
    {% if weather_info %}
        <hr>
        <p>城市:{{ city }}</p>
        <p>天气:{{ weather_info.cond_txt }}</p>
        <p>温度:{{ weather_info.tmp }}℃</p>
        <p>风力:{{ weather_info.wind_dir }}{{ weather_info.wind_sc }}级</p>
    {% endif %}
</body>
</html>

这个模板文件包含一个查询表单和一个用于显示天气信息的区域。

  1. 添加URL映射

weather 应用的 urls.py 文件中添加以下代码:

from django.urls import path
from . import views

app_name = 'weather'

urlpatterns = [
    path('', views.index, name='index'),
]

这个代码片段会将 weather 应用的根路径(即 http://127.0.0.1:8000/weather/)映射到 index() 视图函数。

  1. 启动Django服务器并测试

使用以下命令启动 Django 服务器:

python manage.py runserver

在浏览器中访问 http://127.0.0.1:8000/weather/,就可以看到一个用于查询城市天气的页面。输入城市名称后,点击查询按钮,页面将会显示出指定城市的天气信息。

2.2 示例二:查询周边景点

和风天气API还提供了一个查询城市景点列表的API,我们可以使用它来实现查询周边景点的功能。

  1. weather/views.py 文件中添加一个新的视图函数:
def scenic_spot(request):
    if 'city' in request.GET:
        city = request.GET.get('city')
        headers = {
            'Authorization': 'APPCODE your_appcode',
        }
        params = {
            'city': city,
        }
        response = requests.get('https://api.heweather.net/s6/scenic', headers=headers, params=params)
        data = json.loads(response.text)
        if data['HeWeather6'][0]['status'] == 'ok':
            scenic_spot_list = data['HeWeather6'][0]['scenicList']
        else:
            scenic_spot_list = []
    else:
        city = ''
        scenic_spot_list = []
    context = {
        'city': city,
        'scenic_spot_list': scenic_spot_list,
    }
    return render(request, 'weather/scenic.html', context)

这个视图函数会通过调用和风天气API来获取指定城市的景点列表,并将列表传递给模板进行渲染。其中,your_appcode 需要替换为自己的API Key。

  1. weather 应用的 urls.py 文件中添加以下代码:
urlpatterns = [
    path('', views.index, name='index'),
    path('scenic_spot/', views.scenic_spot, name='scenic_spot'),
]

这个代码片段会将 /scenic_spot/ 路径映射到 scenic_spot() 视图函数。

  1. 创建模板文件

weather/templates/weather 目录下创建一个名为 scenic.html 的模板文件,并编写以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询景点列表</title>
</head>
<body>
    <form method="get">
        <label for="city">城市:</label>
        <input type="text" id="city" name="city" value="{{ city }}">
        <button type="submit">查询</button>
    </form>
    {% if scenic_spot_list %}
        <hr>
        <p>城市:{{ city }}</p>
        <ul>
        {% for scenic_spot in scenic_spot_list %}
            <li>{{ scenic_spot.name }}({{ scenic_spot.category }})</li>
        {% empty %}
            <li>暂无数据</li>
        {% endfor %}
        </ul>
    {% endif %}
</body>
</html>

这个模板文件包含一个查询表单和一个用于显示景点列表的区域。

  1. 启动Django服务器并测试

使用以下命令启动 Django 服务器:

python manage.py runserver

在浏览器中访问 http://127.0.0.1:8000/weather/scenic_spot/,就可以看到一个用于查询周边景点的页面。输入城市名称后,点击查询按钮,页面将会显示出指定城市的景点列表。

总的来说,用Django写天气预报查询网站,需要掌握Django基础知识,如应用、视图函数、模板等,同时需要了解如何从第三方API中获取数据,并将数据传递给模板进行渲染。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Django写天气预报查询网站 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • python+django+虚拟环境(virtualenv[wrapper])+nginx+uwsgi在linux中的安装配置

    编译安装python3 安装依赖 sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev  sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqli…

    Django 2023年4月13日
    00
  • Django Rest Framework实现身份认证源码详解

    我来详细讲解一下“Django Rest Framework实现身份认证源码详解”的完整攻略,下面我们将分为以下几个部分: 介绍Django Rest Framework身份认证的基本原理 详细讲解Django Rest Framework中使用基于Token的身份认证 详细讲解Django Rest Framework中使用基于Session的身份认证 1…

    Django 2023年5月16日
    00
  • Django create和save方法

    Django的模型(Model)的本质是类,并不是一个具体的对象(Object)。当你设计好模型后,你就可以对Model进行实例化从而创建一个一个具体的对象。Django对于创建对象提供了2种不同的save与create方法,我们来仔细分析下这两种方式有什么不同。 我们来先看看下面这个例子。我们已经设计好了一个Person的模型(如下)。 from djan…

    Django 2023年4月11日
    00
  • django redis的使用方法详解

    接下来我会给您详细讲解“django redis的使用方法详解”的完整攻略,并且包含两条示例说明。 概述 Django Redis是Redis客户端,提供了许多重要的特性,比如连接池、分片、集群支持等等,使得Redis在Django中的应用变得更加简单、高效。在使用Django Redis时,需要先安装redis-python包(pip install re…

    Django 2023年5月16日
    00
  • Django模板层(template)

    1、模板是一个文本,用于分离文档的表现形式和内容。也可以说是:HTML代码+模板语法      简单的例子:使用模板在页面显示“hello word”            在template中新建html文件:hello.html,  在views.py中添加对象,向模板中提交数据。在urls.py中添加url与函数对象的映射关系 <h1>{{…

    Django 2023年4月13日
    00
  • Django框架之drf:9、接口文档,coreapi的使用,JWT原理、介绍、快速使用、定制、认证

    目录 Django框架之drf 一、接口文档 二、CoreAPI文档生成器 1、使用方法 三、JWT 1、JWT原理及介绍 2、JWP快速使用 3、定制返回格式 4、JTW的认证类 Django框架之drf 一、接口文档 简介: ​ 接口文档通常是在前后端分离时,后端开发人员需要编写的文档,其内容是将接口的信息、地址和使用方法及其他注意事项告知前端开发人员及…

    2023年4月10日
    00
  • Django时区详解

    Django时区详解 在Django中处理时区是一个十分重要的问题,它不仅只关系到我们的应用程序是否正确运行,还会影响到我们的用户和管理员关于时间的期望和需求。本文将详细讲解Django中时区的相关知识。 时区模型 Django的时区模型分为三种: UTC(Coordinated Universal Time)协调世界时(又称万有时),它是目前世界上最准确的…

    Django 2023年5月16日
    00
  • 【服务后端】Django的多表数据查询

    有数据表class和ClassUserTemp表     需求是要筛选出某个用户lUser管理的班级下ClassUserTemp的所有数据。 Class表的Owner字段表示关联的管理员用户。 只需要使用__关联属性即可,条件路径就是 班级  –> 班级的管理员  –> 与用户比较 pUserClasses = ClassUserTemp.o…

    Django 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部