引言:
本篇文章的实现效果如下图。用django和pyechart实现将图表显示在网页中。
环境创建:
推荐在虚拟环境下进行Django等软件的安装。因为使用方便,和其他的版本不冲突。
用pip进行安装,pip3的意思是基于python3的pip。
pip3 install virtualenv
创建虚拟环境 $ virtualenv --no-site-packages pyecharts-env
终端输出如下,pyecharts-env文件夹就是虚拟环境文件夹。使用虚拟环境需要激活。
激活虚拟环境 $ source pyecharts-env/bin/activate
需要注意的是,激活虚拟环境之后的话,命令行前面多个虚拟环境的名字。如下图,
安装django和pyecharts $ pip install django==1.11.4 $ pip install pyecharts
新建 django 项目 $ django-admin startproject myechartsite 新建应用程序 $ python manage.py startapp myfirstvis
以上完成后,查看目录结构如下,
在 myechartsite/settings.py 中注册应用程序
# myechartsite/settings.py
... INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myfirstvis' # <--- ]
先编辑 urls.py.这文件在 Django 里的功能是把前段的 HTTP 需求和后台服务函数挂钩。
注意,下面修改的是两个文件。
# myfirstvis/urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), ] #------------------------------------------------------------------- #在 myechartsite/urls.py 中新增 'myfirstvis.urls' #myechartsite/urls.py from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'myfirstvis/', include('myfirstvis.urls')) # <--- ]
2.处理视图功能部分
容易被忽略的部分来了。网上很多关于这部分的写法是下面这样的,这样是不对的。如果这样写,后面会报错。“from pyecharts.constants import DEFAULT_HOST”。
所以啊,一定不要这样写。按照下面注释修改就可以了。
#myfirstvis/views.py from __future__ import unicode_literals import math from django.http import HttpResponse from django.template import loader from pyecharts import Line3D #from pyecharts.constants import DEFAULT_HOST #这句去掉 REMOTE_HOST = " #加上这句 def index(request): template = loader.get_template('myfirstvis/pyecharts.html') l3d = line3d() context = dict( myechart=l3d.render_embed(), #host=DEFAULT_HOST,#这句改为下面这句 host=REMOTE_HOST,#<-----修改为这个 script_list=l3d.get_js_dependencies() ) return HttpResponse(template.render(context, request)) def line3d(): _data = [] for t in range(0, 25000): _t = t / 1000 x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t) y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t) z = _t + 2.0 * math.sin(75 * _t) _data.append([x, y, z]) range_color = [ '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] line3d = Line3D("3D line plot demo", width=1200, height=600) line3d.add("", _data, is_visualmap=True, visual_range_color=range_color, visual_range=[0, 30], is_grid3D_rotate=True, grid3D_rotate_speed=180) return line3d
script_list
是 Page() 类渲染网页所需要依赖的 echarts js 库,依赖的库的数量取决于所要渲染的图形种类。
host
是 echarts js 库的地址,默认提供的地址为 https://pyecharts.github.io/assets/js 当然,如果你愿意你也可以改变这个地址,先克隆 https://github.com/pyecharts/assets 然后将 js
文件夹挂载在你自己的服务器上即可。(笔者:这个挂载我还没有尝试,等有时间看看。因为完成后,默认的访问速度很慢,不知道是服务器的问题,还是由于js文件夹没有放在本地的问题。)
3.为项目提供自己的模板
创建文件夹 templates/myfirstvis 。
$ mkdir templates/myfirstvis -p
将下面 html 模板代码保存为 pyecharts.html,请确保 pyecharts.html 文件的绝对路径为 /myfirstvis/templates/myfirstvis
<!-- myfirstvis/templates/pyecharts.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Proudly presented by PycCharts</title> {% for jsfile_name in script_list %} <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="{{host}}/{{jsfile_name}}.js"></script> {% endfor %} </head> <body> {{myechart|safe}} </body> </html>
4. 运行项目
在运行之前,先检查一下各个文件路径是否与我一样。
├── myechartsite │ ├── db.sqlite3 │ ├── manage.py │ ├── myechartsite │ │ ├── __init__.py │ │ ├── __pycache__ │ │ ├── settings.py │ │ ├── urls.py │ │ └── wsgi.py │ └── myfirstvis │ ├── admin.py │ ├── apps.py │ ├── __init__.py │ ├── migrations │ ├── models.py │ ├── __pycache__ │ ├── templates │ ├── tests.py │ ├── urls.py │ └── views.py
好了,开始运行。
$ cd myechartsite $ python manage.py runserver
上面命令的默认端口是8000,可以指定端口号运行,如下。
python manage.py runserver 0.0.0.0:8888
终端输出如下,这时就可以打开浏览器来查看效果了。
地址:http://你的服务器IP:8888/myfirstvis/
(如果是本地电脑,就是 http://127.0.0.1:8888/myfirstvis/ )
到这里就完成了。
可能遇到的问题:
如果访问失败,查看一下阿里云的安全组里面是否把端口加上。
上面代码中“from __future__ import unicode_literals”这句一定要放在那个文件的开头第一句,具体哪个文件见上面代码。不放在第一句,会报错。
报错“You may need to add '47.93.9.14' to ALLOWED_HOSTS.”
原因与修改:
1,以上时我访问请求的时候出现的,原因在于Django框架中的创建的一个项目的时候,
2,跑下这个命令:python manage.py runserver 10.211.55.5:8000
3,然后在我本机的浏览器中写入上述IP和端口请求过去:http://10.211.55.6:8000
4,于是就出现了最上面的那个问题;
5,于是就去django-admin.py startproject project-name创建的项目中去修改 setting.py 文件:ALLOWED_HOSTS = ['*'] #在这里请求的host添加了*
6,于是就成功的访问到了Django的项目了;
共同学习,写下你的评论
评论加载中...
作者其他优质文章