號稱最為簡明實用的Django上手教程(下)
1 前景回顧
係統環境:WIN10 64bit
開發環境:sublime+Anaconda
數據庫:Mysql 5.6.17
語言:python3.5
框架:django1.11+Bootstrap
可視化工具:Highchart|Echarts|plotly|Bokeh(采用Echarts)
2 靜態文件配置操作
(1)靜態static文件夾的配置。
在analysis文件夾下創建:analysis/static和analysis/templates文件夾,其中:
① static:包括,css,js,img,font,files等文件,使用時需要配置,頁麵開頭添加{% load static %}
② templates:包含web的html靜態頁麵,django1.10之後會默認識別
(2)打開xmjc_analysis/setting.py修改如下:
STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, "static")
(3)打開xmjc_analysis/urls.py修改如下:
# 配置加載靜態頁麵 from django.conf import settings from django.conf.urls.static import static urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/$', analysis_views.index,name='index'),# 首頁 ]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
(4) 在基模板(後文詳細介紹)base頁麵開頭添加{% load static %}
(5 )xmjc_analysis/views.py修改如下:
''' 第一個頁麵 author:白寧超 site:https://www.cnblogs.com/baiboy/ ''' #coding:utf-8 from django.shortcuts import render from django.http import HttpResponse def index1(request): name = request.GET['name'] return HttpResponse(u"歡迎"+name+",進入第一個Django頁麵!") def index(request): '''項目統計分析平台主頁''' return render(request,'xmjc/index.html') # 首頁
然後在xmjc_analysis/urls.py下添加訪問
前端nav.html的超鏈接如下:
3 結合Bootstrap和頁麵模板前端設計
(1)什麼是Bootstrap?
Bootstrap是一組用於網站和網絡應用程序開發的開源前端框架,包括HTML、CSS及JavaScript的框架,提供字體排印、窗體、按鈕、導航及其他各種組件及Javascript擴展,旨在使動態網頁和Web應用的開發更加容易。 Bootstrap是GitHub上麵被標記為“Starred”次數排名第二最多的項目。Starred次數超過105,000,而分支次數超過了47,000次。
ps:前端框架,所有的插件依賴於 jQuery。所以必須在插件文件之前引用 jQuery
----維基百科
(2)Bootstrap學習資料
① 官網下載地址:https://getbootstrap.com/
② 中文網下載地址:https://www.bootcss.com/
③ w3c學習網站:https://www.w3cschool.cn/bootstrap
(3)引入 Bootstrap
<!-- 引入 Bootstrap --> <link href="https://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"> <!-- jQuery (Bootstrap 的 JavaScript 插件需要引入 jQuery) --> <script src="https://code.jquery.com/jquery.js"></script>
<!-- 精簡版 --> <link href="https://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet"> <script src="//libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <script src="//libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
具體知識點總結參考文章:【前端知識十分鍾預覽之學習劄記】
(4)基於Bootstrap的頁麵模板設計
① base.html 可以視作母模板,其中包括:
{% load static %} 放在頁麵最頂層,用於識別靜態文件
<head></head> 放入的編碼和基本信息以及css文件(js文件放在頁麵尾部,提高用戶體驗)
側邊欄 引用③文件,便於修改和管理。
<!-- 側邊欄 --> <div > {% include 'xmjc/nav.html' %} </div> <!-- /側邊欄 -->
頁麵內容設計 {% block content %}{% endblock %}占塊符號
<div > {% block content %} <p>此處為主要內容</p> {% endblock %} </div>
(5)運行服務器訪問
頁麵效果:
至此,已經完成靜態頁麵的配置工作。
4 多數據庫配置聯合操作
(1)打開xmjc_analysis/setting.py,有一個默認的數據庫 default,我們可以再加一些其它的(這裏你可以調用Access、SQLServer、Oracle等),比如:
''' 配置Mysql數據庫 2017年7月26日16:40:38 白寧超 ''' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'test', 'PASSWORD': 'test123', 'HOST':'localhost', 'PORT':'3306', }, 'db1': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '數據庫名稱', 'USER': '用戶名', 'PASSWORD': '密碼', "HOST": "localhost", #本地 'PORT':'3306', }, 'db2': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '數據庫名稱', 'USER': '用戶名', 'PASSWORD': '密碼', "HOST": "服務器地址", 'PORT':'3306', }, }
# use multi-database in django DATABASE_ROUTERS = ['xmjc_analysis.database_router.DatabaseAppsRouter'] DATABASE_APPS_MAPPING = { #'app_name':'database_name', 'app1': 'db1', 'app2': 'db2', }
(2)在project_name文件夾中存放 database_router.py 文件,內容如下:


# -*- coding: utf-8 -*- from django.conf import settings DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING class DatabaseAppsRouter(object): """ A router to control all database operations on models for different databases. In case an app is not set in settings.DATABASE_APPS_MAPPING, the router will fallback to the `default` database. Settings example: DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'} """ def db_for_read(self, model, **hints): """"Point all read operations to the specific database.""" if model._meta.app_label in DATABASE_MAPPING: return DATABASE_MAPPING[model._meta.app_label] return None def db_for_write(self, model, **hints): """Point all write operations to the specific database.""" if model._meta.app_label in DATABASE_MAPPING: return DATABASE_MAPPING[model._meta.app_label] return None def allow_relation(self, obj1, obj2, **hints): """Allow any relation between apps that use the same database.""" db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label) db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label) if db_obj1 and db_obj2: if db_obj1 == db_obj2: return True else: return False return None # for Django 1.4 - Django 1.6 def allow_syncdb(self, db, model): """Make sure that apps only appear in the related database.""" if db in DATABASE_MAPPING.values(): return DATABASE_MAPPING.get(model._meta.app_label) == db elif model._meta.app_label in DATABASE_MAPPING: return False return None # Django 1.7 - Django 1.11 def allow_migrate(self, db, app_label, model_name=None, **hints): print(db, app_label, model_name, hints) if db in DATABASE_MAPPING.values(): return DATABASE_MAPPING.get(app_label) == db elif app_label in DATABASE_MAPPING: return False return None
View Code
(3)使用操作
# 查詢 YourModel.objects.using('db1').all() # 保存 或 刪除 user_obj.save(using='new_users') user_obj.delete(using='legacy_users') # 數據庫同步 python manage.py migrate --database=db2 # 數據導出 python manage.py dumpdata app2 --database=db2 > app2_fixture.json python manage.py dumpdata auth > auth_fixture.json # 數據庫導入 python manage.py loaddata app1_fixture.json --database=db1
5 數據挖掘與可視化技術
(1)設計思路
調用Echarts進行可視化展示,其中數據來源於兩個部分,直接調用一方麵數據庫的結構化數據,另一個方麵分析處理非結構化數據。最終處理成json形式,最後結合ajax進行數據綁定展示。這裏【數據挖掘|文本處理技術】不詳細介紹,主要展示思想和流程。期望展示三個案例:柱形圖、餅形圖、數據表格。
(2)數據前台展示,使用表單需要添加{%csrf_token%}
(3)柱形圖案例展示
新建頁麵ksh.html,添加如下代碼
<!-- 為ECharts準備一個具備大小(寬高)的Dom --> <div > <div > </div> </div>
js代碼:
/* 柱狀圖 白寧超 2017年8月4日17:20:42 */ // 基於準備好的dom,初始化echarts圖表 var myChart = echarts.init(document.getElementById('test1')); // 指定圖表的配置項和數據 var option = { title: { text: 'ECharts 入門示例' }, tooltip: {}, legend: { data:['銷量'] }, xAxis: { data: ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"] }, yAxis: { }, series: [{ name: '銷量', type: 'bar', data: [5, 20, 36, 10, 10, 20] }] }; // 使用剛指定的配置項和數據顯示圖表。 myChart.setOption(option);
json數據:上麵案例采用官方數據,隻需要配置data即可,這個data的json數據,你可以通過數據挖掘技術後文本或者數據庫梳理出綁定起來即可。如下所示:
def xmjf(request): lnav="項目經費統計" # 可視化主題 lcontent = "這裏是可視化主題的描述->項目經費統計" # 可視化主題的描述 data=[{"value": 55, "name": '優先55'}, {"value": 70, "name": '普通70'}, {"value": 25, "name": "緊急25"}] data1 = [{"keys":"襯衫", "values":5}, {"keys":"羊毛衫", "values":20}, {"keys":"雪紡衫", "values":36}, {"keys":"褲子", "values":10}, {"keys":"高跟鞋", "values":10}, {"keys":"襪子", "values":20}] return render(request,'xmjc/xmjf.html',{'lnav':lnav,'lcontent':lcontent,'data':data,'data1':data1})
效果:
(4)扇形圖案例展示
新建頁麵ksh.html,添加如下代碼
<!-- 為ECharts準備一個具備大小(寬高)的Dom --> <div > <div > </div> </div>
js代碼


/* 嵌套環形圖 白寧超 2017年8月4日17:21:03 */ var myChart1 = echarts.init(document.getElementById('test2')); option1 = { tooltip: { trigger: 'item', formatter: "{a} <br/>{b}: {c} ({d}%)" }, legend: { orient: 'vertical', x: 'left', data:['直達','營銷廣告','搜索引擎','郵件營銷','聯盟廣告','視頻廣告','百度','穀歌','必應','其他'] }, series: [ { name:'訪問來源', type:'pie', selectedMode: 'single', radius: [0, '30%'], label: { normal: { position: 'inner' } }, labelLine: { normal: { show: false } }, data:[ {value:335, name:'直達', selected:true}, {value:679, name:'營銷廣告'}, {value:1548, name:'搜索引擎'} ] }, { name:'訪問來源', type:'pie', radius: ['40%', '55%'], data:[ {value:335, name:'直達'}, {value:310, name:'郵件營銷'}, {value:234, name:'聯盟廣告'}, {value:135, name:'視頻廣告'}, {value:1048, name:'百度'}, {value:251, name:'穀歌'}, {value:147, name:'必應'}, {value:102, name:'其他'} ] } ] }; myChart1.setOption(option1);
View Code
效果
(5)表格案例展示
新建頁麵ksh.html,添加如下代碼


<!-- DATA TABLES --> <div class="row"> <div class="col-md-6"> <!-- BOX --> <div class="box border green"> <div class="box-title"> <h4><i class="fa fa-table"></i>動態數據表格</h4> <div class="tools hidden-xs"> <a href="javascript:;" class="reload"> <i class="fa fa-refresh"></i> </a> <a href="javascript:;" class="collapse"> <i class="fa fa-chevron-up"></i> </a> <a href="javascript:;" class="remove"> <i class="fa fa-times"></i> </a> </div> </div> <div class="box-body"> <table id="datatable1" cellpadding="0" cellspacing="0" border="0" class="datatable table table-striped table-bordered table-hover"> <thead> <tr> <!-- hidden-lg/md/xs/sm --> <th class="center">用戶名</th> <th class="center">密碼</th> <th class="center">郵箱</th> <th class="center">權限</th> </tr> </thead> <tbody id="tbody"> {% for user in data %} <tr class="gradeB"> <td class="center">{{ user.username }}</td> <td class="center">{{ user.userpass }}</td> <td class="center">{{ user.useremail }}</td> <td class="center">{{ user.usertype }}</td> </tr> {% endfor %} </tbody> <tfoot> <tr> <th class="center">用戶名</th> <th class="center">密碼</th> <th class="center">郵箱</th> <th class="center">權限</th> </tr> </tfoot> </table> </div> </div> <!-- /BOX --> </div> </div>
View Code
效果
6 將項目上傳到github,進行項目管理
(1)下載:Git 各平台安裝包下載地址為:https://git-scm.com/downloads
pip install git-core
Windows 平台上安裝包下載地址:https://msysgit.github.io/
(2)使用:Windows版Git下載安裝,在開始菜單裏找到Git->Git Bash
(3)配置你的名字和Email地址。
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
(4)創建版本庫
$ cd /E //你指定的個人盤符 $ mkdir mygit //創建版本庫根目錄 $ cd mygit //進入版本庫目錄 $ pwd //查看當前路徑
(5) 將需要上傳的項目拷貝到版本庫即mygit裏麵,查看
(6)通過git init命令把目錄變成Git可以管理的倉庫
(7) mygit下創建xmjc_analysis,用命令git add告訴Git,把文件添加到倉庫
(8)用命令git commit提交到倉庫,-m本次提交的說明
(9)遠程連接倉庫
git remote add originbnc git@github.com:username/bncgit.git
(10)推送
git push -u originbnc master
(11)查看我的github
自此,完成全部初級學習,擴展處讀者自行學習。
最後更新:2017-08-30 15:32:38
上一篇:
開發者論壇一周精粹(第十五期):Oracle發布多個Java漏洞更新-2017年7月
下一篇:
號稱簡明實用的Django上手教程
為什麼要申報創新基金?創新基金申報有什麼好處?申報創新基金的條件是什麼?
手把手教你申請ENS (Ethereum Name Service)
PostgreSQL NULL值相對位置與QUERY優化 - nulls first\last, asc\desc
android的<uses-feature>詳解
為未來20年提供計算能力:阿裏巴巴推出麒麟數據中心解決方案
20大讓人啼笑皆非的歧義域名
雲服務器 ECS 建站教程:搭建WordPress網站
HGE 係列教材(8) --- hgeResourceManager helper class(本文未完成)
Swift數字類型之間的轉換
ComBox控件下拉框選項的添加