用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日

相关文章

  • 搭建高性能的 Django 服务器栈

    http://logic0.blog.163.com/blog/static/18892814620136258532112/ 搭建高性能的 Django 服务器栈   2013-07-25 23:00:22|  分类:Django学习 网站  |举报|订阅 对不起各位,我有点稍微标题党了。 本文针对裸机 Linux 搭建 Django 的服务器栈,可直接应…

    Django 2023年4月12日
    00
  • django框架学习:二十五.django xadmin管理后台

    前面学习了django自带的admin后台管理感觉页面不美观,网上的大神优化了一版后台管理xadmin,并且开源了,在github开源下载到源码。 django 2.1.2 xadmin 2.0 python 3.6 xadmin安装 xadmin在github的源码地址https://github.com/sshwsfc/xadmin,可以用pip安装也可…

    2023年4月10日
    00
  • 启动Django项目

    Django是一个高效、灵活、模块化的Python web框架,用于快速开发Web应用程序。Django的核心包括模型、视图和模板,它们可以帮助开发人员快速构建功能强大的Web应用程序,并提供一种易于使用的API来连接不同的组件。 在这篇文章中,我们将学习如何启动Django项目。下面是详细的步骤: 首先,确保你安装了Python。 你需要安装Python才…

    Django 2023年3月12日
    00
  • python-django缓存

    1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力. 缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问…

    Django 2023年4月13日
    00
  • 简单解析Django框架中的表单验证

    来详细讲解一下“简单解析Django框架中的表单验证”的完整攻略。 一、Django表单验证介绍 Django在views.py中提供了一个验证用户提交的表单的方法,使得我们可以轻松地验证表单数据,从而保证表单数据的安全性和可靠性。 在Django中,表单验证通常分为两个步骤,分别是: 创建一个表单类,通过这个表单验证用户输入的数据格式是否符合要求。 编写视…

    Django 2023年5月16日
    00
  • django1.6 GET url传参 乱码

    在使用django的时候,用到了url传参, 但是发现怎么也传不过去,出现url中 ‘=’ 乱码,而且更严重的出现url 与写在urls的正则不匹配,导致出现404错误 在网上发现:django使用GET传参的注意细节: 下面是我的url正则: url(r’^network/detail/$’,’oak.network.detail’,name=’detai…

    Django 2023年4月9日
    00
  • Django Admin 在内联中覆盖保存方法(admin.TabularInline)

    一  使用环境   开发系统: windows   IDE: pycharm     数据库: msyql,navicat   编程语言: python3.7  (Windows x86-64 executable installer)   虚拟环境: virtualenvwrapper   开发框架: Django 2.2 二 Django Admin 在…

    Django 2023年4月13日
    00
  • Django框架搭建web项目(二)

    1.在路径XXXXX\mydjango\mydjango\mydjango下新建views.py(在浏览器中url请求后所展示的内容设置) from django.http import HttpResponse def hello(request): return HttpResponse(“Hello world ! “) 2.绑定url与视图函数,在路…

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