用Django实现一个Web端垃圾分类的功能。
主要流程为:在网页上有一个搜索框,输入搜索关键词,获取对应搜索数据。
这里需要用到天行数据API接口,提供数据服务。网站为:https://www.tianapi.com/,只需申请一个账号可以免费使用接口数据(有次数限制,个人使用足够)。
开发环境:Windows10,Pycharm,Python3.7,Django2.1
Django创建项目与app不多说,进入代码编辑主要部分:
创建完项目和app后,_test项目目录下还有一个_test文件夹,为项目配置文件夹。
在配置文件夹中找到settigs.py文件,找到INSTALLED_APPS,将创建的app加入,代码为:
'testapp.apps.TestappConfig',
在配置文件夹中找到urls.py文件,将testapp的urls加入urlpatterns中,代码为:
path('', include('testapp.urls')),
记住需要导入include,代码如下:
from django.urls import path, include
testapp中新建urls.py文件,代码为:
from django.urls import path
from . import views
app_name = 'testapp'
urlpatterns = [
# main
path('index/', views.index, name='index'),
path('get_search/', views.get_search, name='get_search'),
]
编辑视图函数views.py:
import json
import urllib.request
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'testapp/index.html', locals())
def get_search(request):
word = request.GET.get('q') # 获取搜索表单关键词,这里的q与前端form表单中的字段值name的值一样
key = '*****' # 天行数据账号的key为一串数字,记得替换
word_quote = urllib.request.quote(word) # 处理关键词为中文时的编码问题
if word != '':
url = "http://api.tianapi.com/txapi/lajifenlei/index?key={}&word={}".format(key, word_quote)
try:
r = urllib.request.Request(url=url)
req = urllib.request.urlopen(r)
content = req.read().decode("utf-8") # 将获取的内容编码为utf-8
json_response = json.loads(content) # 将数据转化为json格式,便于处理
except urllib.error.URLError as e:
pass
else:
# 判断是否成功获取数据
if json_response['code'] == 200 and (json_response['newslist'] is not None):
news_list = json_response["newslist"][:10] # 获取前十条数据
elif json_response['code'] == 200 and (json_response['newslist'] is None):
empty_data = '未搜索到数据!请修改关键词!'
else:
error = "暂时不能搜索,请稍后再试!"
return render(request, 'testapp/search.html', locals())
PS: 第一个视图用来展示未搜索界面,第二个视图用来展示搜索结果。
编辑前端html文件:
在testapp下新建templates文件夹,在templates下新建index.html和search.html文件。
index.html文件:
HomePage
search.html文件如下:
Back home
{% if news_list %}
{% for item in news_list %}
{{ item.name }}
{{ item.explain }}
{{ item.contain }}
{% endfor %}
{% else %}
{{ empty_data }}
{% endif %}
PS:html文件未作优化处理,如CSS原生样式或者bootstrap样式。