python版本:3.5, bootstrap版本:3.3.7, django版本:2.0
通过win+r键进入cmd输入命令:
django-admin.py startproject website
cd website
python manage.py startapp tool
进入website/website/settings.py添加如下代码:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'tool',#此处为添加
]
#最后一行添加如下代码
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'collectstatic')
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
在最外层website目录下创建static文件夹,进入static文件夹再创建bootstrap文件夹,相应教程可参考django引入bootstrap模板以及图片显示 。
进入tool文件夹修改models.py,可参考python凤凰新闻数据分析(一)python爬虫数据爬取 和python凤凰新闻数据分析(二)爬虫数据写入django sqlite3数据库
然后进入admin.py修改如下:
from django.contrib import admin
# Register your models here.
from .models import *
class InformationAdmin(admin.ModelAdmin):
list_display = ('title','time','created')
admin.site.register(Information,InformationAdmin)
进入tool文件夹修改views.py,部分代码如下:
from django.shortcuts import render,render_to_response
# Create your views here.
from django.http import HttpResponse
from tool.models import *
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba
def plot(request):
Information_news = Information.objects.all()
Information_news_list = []
I_num = M_num = S_num = E_num = F_num =0 #点击量总和,为之后饼状图数据
slices = [] #为之后饼状图数据
for each_I in Information_news:
I_num += int(each_I.clicks)
Information_news_list.append(str(each_I))
slices.append(I_num)
str_ = "".join(Information_news_list)
Information_news_text = ' '.join(jieba.cut(str_))
path = 'msyh.ttc'
wordcloud = WordCloud(font_path=path).generate(Information_news_text)
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis("off")
plt.savefig("C:/pork/website/static/figure/Information.png")
# 饼状图为点击量比例,需要单独到控制台生成,即python manage.py shell进入控制台,这里有个问题:生成的饼状图会覆盖词云
# activities = ['Information','Military','Sports','Entertainment','Finance']
# cols = ['tan','cadetblue','y','palegreen','plum']
# try:
# plt.pie(slices,
# explode=[0,0.2,0,0,0],
# labels=activities,
# colors=cols,
# startangle=90,
# shadow=False,
# autopct='%1.1f%%')
# except ValueError as e:
# pass
# plt.savefig("C:/pork/website/static/figure/Total.png")
return render(request,'news_plot.html')
在tool文件夹下新建templates文件夹,在tool/templates/创建news_plot.html,可参考django引入bootstrap模板以及图片显示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>新闻网站的数据分析</title>
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
<script src="/static/bootstrap/jquery/jquery.min.js"></script>
<script src="/static/bootstrap/js/bootstrap.min.js"></script>
<style>
.fakeimg {
height: 400px;
}
.img-thumbnail{
height: 400px;
width: 800px;
}
</style>
</head>
<body>
<div class="jumbotron text-center" style="margin-bottom:0">
<h1>新闻网站的数据分析</h1>
</div>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Python</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li class="active"><a href="#">主 页</a></li>
<li><a href="#">词 云</a></li>
<li><a href="#">关 于</a></li>
</ul>
</div>
</div>
</nav>
{% load static %}
<div class="container">
<div class="row">
<div class="col-sm-4">
<h2>新闻链接</h2>
<ul class="nav nav-pills nav-stacked">
<li class="active"><a href="#">资讯</a></li>
<li><a href="#">军事</a></li>
<li><a href="#">体育</a></li>
<li><a href="#">娱乐</a></li>
<li><a href="#">财经</a></li>
</ul>
<h2>新闻点击量比例</h2>
<div class="fakeimg"><img src="{% static "figure/Total.png" %}" height="400px" width="360px"></div>
<hr class="hidden-sm hidden-md hidden-lg">
</div>
<div class="col-sm-8">
<h2 class="I">资讯</h2>
<div class="fakeimg"><img src="{% static "figure/Information.png" %}" class="img-thumbnail"></div>
<br>
<h2 class="M">军事</h2>
<div class="fakeimg"><img src="{% static "figure/Military.png" %}" class="img-thumbnail"></div>
<h2 class="S">体育</h2>
<div class="fakeimg"><img src="{% static "figure/Sports.png" %}" class="img-thumbnail"></div>
<h2 class="E">娱乐</h2>
<div class="fakeimg"><img src="{% static "figure/Entertainment.png" %}" class="img-thumbnail"></div>
<h2 class="F">财经</h2>
<div class="fakeimg"><img src="{% static "figure/Finance.png" %}" class="img-thumbnail"></div>
</div>
</div>
</div>
<div class="jumbotron text-center" style="margin-bottom:0">
<p><span class="glyphicon glyphicon-copyright-mark" aria-hidden="true"></span> 河北金融学院版权所有</p>
</div>
</body>
</html>
修改website/website/urls.py如下:
from django.contrib import admin
from django.urls import path
from tool.views import *
urlpatterns = [
path('index/',plot),
path('admin/', admin.site.urls),
]
然后cmd输入:
python manage.py runserver 0.0.0.0:8000
浏览器输入127.0.0.1:8000/index即可看到:
完整代码可下载查看:
https://download.csdn.net/download/css_aaa/10530705