前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django+Pyecharts项目实战开发

Django+Pyecharts项目实战开发

作者头像
Baige
发布2022-03-22 15:18:57
4080
发布2022-03-22 15:18:57
举报
文章被收录于专栏:世荣的博客

关于记录一些报错问题

1.SyntaxError: Non-ASCII character 'xe9' in file /Users/macbook/Desktop/back_end/test.py on line 18, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 解析原因: SyntaxError: Non-ASCII character 'xe9' in file意思是说,在文件中存在非ASCII字符; ASCII是8位即一个字符,一共256个字符,随着计算机的发展,现在已经用到2个或者4个字符; 最重要的原因就是文件中有中文 解决办法: 文件头部填入:

代码语言:javascript
复制
# -*- coding: cp936 -*-
或者
# -*- coding: utf-8 -*

2.用python request腾讯新闻网的内容 报错:('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')) 分析: 之前我的Homebrew不太合适,换了一下,然后可能把OpenSSL没有重装,重装测试之后还是不行,既然不是这里的问题,那应该就是其他地方的问题,于是最后找了好久,给我另一个(项目正在使用的Python版本)安装了三个库,于是测试成功了,这里就很开心。 解决: 在安装requests库时,它会跳过一些SSL/Https连接所需的可选安全包('pyOpenSSL','ndg-httpsclient'和'pyasn1')。

代码语言:javascript
复制
pip install pyOpenSSL
pip install ndg-httpsclient
pip install pyasn1

这里先上一个demo:

代码语言:javascript
复制
# -*- coding: utf-8 -*
import json
import requests
import pandas as pd
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType, ChartType

reponse = requests.get(
'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5').json()
data = json.loads(reponse['data'])
province = []
confirm = []
for item in data['areaTree'][0]['children']:
    province.append(item['name'])
    confirm.append(item['total']['confirm'])
china_data = pd.DataFrame({"province": province, "confirm": confirm})

dicts_all = {'黑龙江': [127.9688, 45.368], '上海': [121.4648, 31.2891],
             '内蒙古': [110.3467, 41.4899], '吉林': [125.8154, 44.2584],
             '辽宁': [123.1238, 42.1216], '河北': [114.4995, 38.1006],
             '天津': [117.4219, 39.4189], '山西': [112.3352, 37.9413],
             '陕西': [109.1162, 34.2004], '甘肃': [103.5901, 36.3043],
             '宁夏': [106.3586, 38.1775], '青海': [101.4038, 36.8207],
             '新疆': [87.9236, 43.5883], '西藏': [91.11, 29.97],
             '四川': [103.9526, 30.7617], '重庆': [108.384366, 30.439702],
             '山东': [117.1582, 36.8701], '河南': [113.4668, 34.6234],
             '江苏': [118.8062, 31.9208], '安徽': [117.29, 32.0581],
             '湖北': [114.3896, 30.6628], '浙江': [119.5313, 29.8773],
             '福建': [119.4543, 25.9222], '江西': [116.0046, 28.6633],
             '湖南': [113.0823, 28.2568], '贵州': [106.6992, 26.7682],
             '广西': [108.479, 23.1152], '海南': [110.3893, 19.8516],
             '广东': [113.28064, 23.125177], '北京': [116.405289, 39.904987],
             '云南': [102.71225, 25.040609], '香港': [114.165460, 22.275340],
             '澳门': [113.549130, 22.198750], '台湾': [121.5200760, 25.0307240]}

for item in [list(z) for z in zip(china_data['province'], 
china_data['confirm'])]:
    dicts_all[item[0]].append(item[1])

(Map3D()
 .add_schema(
    itemstyle_opts=opts.ItemStyleOpts(
        color="rgb(5,101,123)",
        opacity=1,
        border_width=0.8,
        border_color="rgb(62,215,213)"),
    map3d_label=opts.Map3DLabelOpts(
        is_show=False,
        formatter=JsCode(
            "function(data){return data.name + " " + data.value[2];}")),
    emphasis_label_opts=opts.LabelOpts(
        is_show=False,
        color="#fff",
        font_size=10,
        background_color="rgba(0,23,11,0)"),
    light_opts=opts.Map3DLightOpts(
        main_color="#fff",
        main_intensity=1.2,
        main_shadow_quality="high",
        is_main_shadow=False,
        main_beta=10,
        ambient_intensity=0.3))
 .add(
    series_name="bar3D",
    data_pair=list(zip(list(dicts_all.keys()), list(dicts_all.values()))),
    type_=ChartType.BAR3D,
    bar_size=1,
    shading="lambert",
    label_opts=opts.LabelOpts(
        is_show=True,
        formatter=JsCode(
            "function(data){return data.name + ' ' + data.value[2];}")))
 .set_global_opts(title_opts=opts.TitleOpts(title="COVID-19全国疫情分布图")))
.render("render.html")

demo测试成功:

这里创建好项目之后,先修改设置吧。

1.settings.py

代码语言:javascript
复制
#ALLOWED_HOSTS是一个字符串列表,代表了这个Django网站可以服务的主机名或域名。
这是为了阻止HTTP Host头攻击而采用的一种安全措施

ALLOWED_HOSTS = ['xxx.xxx.xxx.xxx','127.0.0.1']
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app.apps.AppConfig', #添加子应用
]

# 数据库设置,默认数据库改为MySQL数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'xxx.xxx.xxx.xxx',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '123',
        'NAME': 'crawler',
    }
}
LANGUAGE_CODE = 'zh-Hans'#语言

TIME_ZONE = 'Asia/Shanghai'#时区

#静态文件   在static添加的任何静态文件都可以使用网址/static/文件在static中的路径来访问了
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

2.server/server/urls.py

代码语言:javascript
复制
from django.contrib import admin
from django.urls import path
urlpatterns = [
    path('admin/', admin.site.urls),
]

3.server/app/urls.py

代码语言:javascript
复制
from django.conf.urls import url
from app.views import index
app_name = 'info'
urlpatterns = [
    url(r'^$',index,name = 'index'),
    url(r'^index/$',index,name = 'index'),# 每个都返回到views下index实现业务逻辑
]

4.设置爬虫爬取的网站(之前测试过,因此这里继续爬取腾讯网)

在app子应用下创建一个名为‘Crawler.py’爬虫工具文件,里面封装了爬虫方法。

5.创建Models中的class对应数据库中的表,属性对应字段。

(1)定义模型类

在models.py中定义模型类,继承自models.Model

代码语言:javascript
复制
class foreign_data(models.Model):
    date = models.DateField(verbose_name='更新时间')
    name = models.CharField(max_length=20,verbose_name='国家')
    confirm = models.IntegerField(verbose_name='确认总数')
    confirmAdd = models.IntegerField(verbose_name='新增确诊人数')
    heal = models.IntegerField(verbose_name='治愈人数')
    dead = models.IntegerField(verbose_name='死亡人数')
    nowConfirm = models.IntegerField(verbose_name='现存确诊')

    class Meta:
        #改表名
        db_table = 'foreign_data'
        #修改后台admin对的显示信息的配置
        verbose_name_plural = '国外疫情数据(每个国家不同日期的数据)'

    def __str__(self):
        #后台显示
        return self.name +':' + str(self.date)

class globalStatic(models.Model):
    lastUpdateTime = models.DateTimeField(verbose_name='更新时间')
    nowConfirm = models.IntegerField(verbose_name='现存确诊')
    confirm = models.IntegerField(verbose_name='确认总数')
    heal = models.IntegerField( verbose_name='治愈人数')
    dead = models.IntegerField(verbose_name='死亡人数')
    nowConfirmAdd = models.IntegerField(verbose_name='新增现存确诊人数')
    confirmAdd = models.IntegerField(verbose_name='新增确诊人数')
    healAdd = models.IntegerField(verbose_name='新增治愈人数')
    deadAdd = models.IntegerField(verbose_name='新增死亡人数')

    class Meta:
        # 改表名
        db_table = 'globalStatic'
        # 修改后台admin对的显示信息的配置
        verbose_name_plural = '全球疫情总数据'

    def __str__(self):
        return '更新时间'+str(self.lastUpdateTime)

class USA_history_confirm_data(models.Model):
    date = models.DateField(verbose_name='日期')
    confirm = models.IntegerField(verbose_name='确认数')

    class Meta:
        # 改表名
        db_table = 'USA_history_confirm_data'
        # 修改后台admin对的显示信息的配置
        verbose_name_plural = '美国历史疫情数据'

    def __str__(self):
        return '日期:'+str(self.date)

# 全球疫情实体类
class usa_global_all_data(models.Model):
    date = models.DateField(verbose_name='日期')
    usaconfirm = models.IntegerField(verbose_name='美国确诊')
    confirm = models.IntegerField(verbose_name='全球确诊')
    dead = models.IntegerField(verbose_name='全球死亡')
    heal = models.IntegerField(verbose_name='全球治愈')
    confirmAdd = models.IntegerField(verbose_name='全球新增')
    class Meta:
        # 改表名
        db_table = 'usa_global_all_data'
        # 修改后台admin对的显示信息的配置
        verbose_name_plural = '美国和全球历史疫情数据'

    def __str__(self):
        return '日期:'+str(self.date)

(2)模型迁移(建表)

代码语言:javascript
复制
生成迁移文件:根据模型类生成创建表的语句
python manage.py makemigrations
执行迁移:根据第一步生成的语句在数据库中创建表
python manage.py migrate

6.实现数据库操作方法

在app子应用下创建一个名为‘mysqldb.py’数据库操作工具文件,里面封装了数据库操作方法。

7.创建HTML页面

在templates文件夹中创建一个名为'index'的html文件

8.前后端交互业务逻辑部分views.py

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022 年 01 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于记录一些报错问题
  • 1.settings.py
  • 2.server/server/urls.py
  • 3.server/app/urls.py
  • 4.设置爬虫爬取的网站(之前测试过,因此这里继续爬取腾讯网)
  • 5.创建Models中的class对应数据库中的表,属性对应字段。
    • (1)定义模型类
      • (2)模型迁移(建表)
      • 6.实现数据库操作方法
      • 7.创建HTML页面
      • 8.前后端交互业务逻辑部分views.py
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档