下面为您详细讲解“用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 应用,实现查询城市天气的功能。
- 创建一个新的 Django 应用
使用以下命令创建一个名为 weather
的 Django 应用:
python manage.py startapp weather
- 在
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。
- 创建模板文件
在 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>
这个模板文件包含一个查询表单和一个用于显示天气信息的区域。
- 添加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()
视图函数。
- 启动Django服务器并测试
使用以下命令启动 Django 服务器:
python manage.py runserver
在浏览器中访问 http://127.0.0.1:8000/weather/
,就可以看到一个用于查询城市天气的页面。输入城市名称后,点击查询按钮,页面将会显示出指定城市的天气信息。
2.2 示例二:查询周边景点
和风天气API还提供了一个查询城市景点列表的API,我们可以使用它来实现查询周边景点的功能。
- 在
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。
- 在
weather
应用的urls.py
文件中添加以下代码:
urlpatterns = [
path('', views.index, name='index'),
path('scenic_spot/', views.scenic_spot, name='scenic_spot'),
]
这个代码片段会将 /scenic_spot/
路径映射到 scenic_spot()
视图函数。
- 创建模板文件
在 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>
这个模板文件包含一个查询表单和一个用于显示景点列表的区域。
- 启动Django服务器并测试
使用以下命令启动 Django 服务器:
python manage.py runserver
在浏览器中访问 http://127.0.0.1:8000/weather/scenic_spot/
,就可以看到一个用于查询周边景点的页面。输入城市名称后,点击查询按钮,页面将会显示出指定城市的景点列表。
总的来说,用Django写天气预报查询网站,需要掌握Django基础知识,如应用、视图函数、模板等,同时需要了解如何从第三方API中获取数据,并将数据传递给模板进行渲染。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Django写天气预报查询网站 - Python技术站