用Django写天气预报查询网站

yizhihongxing

下面为您详细讲解“用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+Vue打造购物网站(二)

    配置后台管理 xadmin直接使用之前的在线教育的那个就可以了 users/adminx.py #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/9/19 下午 01:15 # @Author : gao # @File : adminx.py import xadmin from us…

    2023年4月9日
    00
  • Python Django log日志

    log开发日志 一、创建项目 1、python -m venv ll_env # 创建虚拟环境 2、source ll_env/bin/activate # 激活虚拟环境 3、pip install django # 安装django 4、django-admin.py startproject project . # 创建项目 5、python manag…

    Django 2023年4月11日
    00
  • 使用Django搭建一个基金模拟交易系统教程

    下面是使用Django搭建基金模拟交易系统的完整攻略: 1. 准备工作 在开始之前,需要确认是否已经安装Python和Django。如果还没有安装,请先进行安装。 2. 创建Django项目 使用Django创建一个新项目,运行如下命令: django-admin startproject fund_simulator 这个命令将创建一个名为fund_sim…

    Django 2023年5月16日
    00
  • Django在使用models生成数据库表时报错:django.contrib.admin.sites.AlreadyRegistered: The model Event is already registered

    在进行Django项目中需要创建一个组与用户 实例代码如下: 但是在执行Pythonx manage.py runserver时,就会报错,同时网页端也无法打开,报错如下:       不要慌,先分析下代码报错内容,说在sites.py 这个文件中,93行有这么一个报错:django.contrib.admin.sites.AlreadyRegistered…

    2023年4月9日
    00
  • 在ubuntu16上进行nginx+uwsgi+django部署的简要步骤

    网上有很多部署教程,说了一大堆,遇到坑还是要自己一个个解决,这里有几个比较重要的坑大家一定要注意。 1、首先要安装python和python-dev环境,如果没有安装python-dev后面安装有些依赖要报错。这是第一个坑。 apt-get install python python-dev pip 2、安装uwsgi要先安装gcc的编译环境。这是第二个坑。…

    Django 2023年4月13日
    00
  • Django查询数据库性能优化

    现在有一张用户信息的数据表,表中记录了10个用户的姓名,昵称,年龄,工作等信息, models文件 from django.db import models class Job(models.Model): title=models.CharField(max_length=32) class UserInfo(models.Model): username…

    Django 2023年4月12日
    00
  • Django 限制访问频率的思路详解

    Django 限制访问频率的思路详解 背景 对于一些需要大量计算的操作或者容易被恶意攻击的接口,为了避免服务器压力过大,需要限制用户访问频率。 思路 限制用户访问频率的思路主要是通过中间件实现,大致的流程如下: 在中间件中获取请求的IP地址。 判断该IP地址是否已经存在于缓存中,并且距离上次访问时间是否超过了限制的时间间隔。 如果超过了时间间隔,则更新该IP…

    Django 2023年5月15日
    00
  • 【Django数据库】如何将一个表自定义的key列还原成id列作为key

    例如下表UserVerifyCode,自定义了idUser这个key     修改成如下,去掉idUer的主键属性   使用python manage.py makemigrations,id是新增列,不能为空,所以必须输入默认值     解决办法 Step1:清空表的数据 Step2:上图上选择1方法,输入int(0) Step3: id列我们的都知道,实…

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