【秒懂】號稱最為簡明實用的Django上手教程(下)
作者:白寧超
2017年8月25日08:51:58
摘要:上文號稱【最為簡明實用的Django上手教程】介紹了django基本概念、配置和相關操作。相信通過上文的閱讀,基本明白django執行機制和操作。假設你現在通過dome和相關書籍已經基本理解django這臺機器的執行。下一步如何像asp.net、Jsp,PHP等常規網站開發,進行前後臺互動呢?又如何採用較為簡潔美觀的前端框架進行設計呢?假設你需要配置多個數據庫怎麼辦?靜態檔案單獨存放需要哪些配置?針對這些配置有哪些便利?最後,假設你又是一名對資料開發很感興趣的,且學過一些機器學習,資料探勘,自然語言處理,雲端計算等技術之一,想挖掘分析資料並進行視覺化,怎麼辦?本文就是針對這些問題開始的。
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:http://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學習資料
① 官網下載地址:http://getbootstrap.com/
② 中文網下載地址:http://www.bootcss.com/
③ w3c學習網站:https://www.w3cschool.cn/bootstrap
(3)引入 Bootstrap
<!-- 引入 Bootstrap --> <link href="http://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="http://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 id="sidebar" class="sidebar"> {% include 'xmjc/nav.html' %} </div> <!-- /側邊欄 -->
頁面內容設計 {% block content %}{% endblock %}佔塊符號
<div class="row col-lg-12"> {% block content %} <p>此處為主要內容</p> {% endblock %} </div>
底部 存放js檔案
<!DOCTYPE html> <html> <head> {% load static %} <!-- meta的引用 --> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta charset="utf-8"> <meta name="author" content="bnc"> <!-- CSS樣式設計 --> <link rel="stylesheet" type="text/css" href="/static/bootstrap-dist/css/bootstrap.min.css" /> <link rel="stylesheet" type="text/css" href="/static/bootstrap-dist/css/bootstrap-theme.css" /> <!-- 換膚 --> <link rel="stylesheet" type="text/css" href="/static/css/cloud-admin.css" /> <link rel="stylesheet" type="text/css" href="/static/css/themes/default.css" id="skin-switcher" /> <!--圖示 --> <link href="/static/font-awesome/css/font-awesome.min.css" rel="stylesheet"/> <!-- JQUERY UI--> <link rel="stylesheet" type="text/css" href="/static/js/jquery-ui-1.10.3.custom/css/custom-theme/jquery-ui-1.10.3.custom.min.css" /> <!-- 表格 --> <link rel="stylesheet" type="text/css" href="/static/js/datatables/media/css/jquery.dataTables.min.css" /> <link rel="stylesheet" type="text/css" href="/static/js/datatables/media/assets/css/datatables.min.css" /> <link rel="stylesheet" type="text/css" href="/static/js/datatables/extras/TableTools/media/css/TableTools.min.css" /> <!-- JQUERY,所有bootstrap依賴此js --> <script src="/static/js/jquery-2.0.3.min.js"></script> <!-- echarts --> <script src="/static/js/echarts/echarts.js"></script> <!-- title標籤,可以自定義設定 --> <title>{% block title %}四川省科技廳大資料決策分析平臺{% endblock %}</title> </head> <body > <!-- 頂部設計 --> <header class="navbar clearfix" id="header"> <div class="container"> <div class="navbar-brand "> <!-- 公司logo --> <a href="{% url 'index' %}"> <img src="/static/img/logo/logo.png" alt="" class="img-responsive" height="30" width="120"> </a> <!-- /公司logo --> <!-- 摺疊側邊欄 --> <div id="sidebar-collapse" class="sidebar-collapse btn"> <i class="fa fa-bars" data-icon1="fa fa-bars" data-icon2="fa fa-bars" ></i> </div> <!-- /摺疊側邊欄 --> </div> <!-- NAVBAR LEFT --> <ul class="nav navbar-nav pull-left hidden-xs" id="navbar-left"> <li class="dropdown"> <a href="{% url 'index' %}" class="team-status-toggle dropdown-toggle tip-bottom" data-toggle="tooltip" title="大資料決策分析平臺"> <span class="name" style="font-size: x-large;">大資料決策分析平臺</span> </a> </li> </ul> <!-- /NAVBAR LEFT --> <!-- BEGIN TOP NAVIGATION MENU --> <ul class="nav navbar-nav pull-right" style="float: right;margin-right: -6%"> <!-- 通知 --> <li class="dropdown" id="header-notification"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-bell"></i> <span class="badge">7</span> </a> <ul class="dropdown-menu notification"> <li class="dropdown-title"> <span><i class="fa fa-bell"></i> 6 訊息通知</span> </li> <!-- 通知下拉使用者資訊 --> <li> <a href="#"> <span class="label label-success"><i class="fa fa-user"></i></span> <span class="body"> <span class="message">5 使用者線上. </span> <span class="time"> <i class="fa fa-clock-o"></i> <span>剛剛</span> </span> </span> </a> </li> <!-- /通知下拉使用者資訊 --> <!-- 伺服器資訊 --> <li> <a href="#"> <span class="label label-warning"><i class="fa fa-lock"></i></span> <span class="body"> <span class="message">DW1 伺服器停止.</span> <span class="time"> <i class="fa fa-clock-o"></i> <span>32 分鐘前</span> </span> </span> </a> </li> <!-- /伺服器資訊 --> <!-- 檢視所有通知資訊 --> <li class="footer"> <a href="#">檢視所有通知資訊 <i class="fa fa-arrow-circle-right"></i></a> </li> <!-- /檢視所有通知資訊 --> </ul> </li> <!-- /通知 --> <!-- 登入資訊 --> <li class="dropdown user" id="header-user"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> <img alt="" src="/static/img/avatars/avatar3.jpg" /> <span class="username">王定國</span> <i class="fa fa-angle-down"></i> </a> <ul class="dropdown-menu"> <li><a href="#"><i class="fa fa-user"></i>個人簡介</a></li> <li><a href="#"><i class="fa fa-cog"></i> 賬號設定</a></li> <li><a href="login.html"><i class="fa fa-power-off"></i>退 出</a></li> </ul> </li> <!-- /登入資訊 --> </ul> <!-- END TOP NAVIGATION MENU --> </div> </header> <!--/頂部設計 --> <!-- 主頁面設計 --> <section id="page"> <!-- 側邊欄 --> <div id="sidebar" class="sidebar"> {% include 'xmjc/nav.html' %} </div> <!-- /側邊欄 --> <!-- 右側 --> <div id="main-content"> <div class="container"> <div class="row"> <!-- 右側內容 --> <div id="content" class="col-lg-12"> <div class="row col-lg-12"> <div class="page-header"> <!-- 麵包式導航頁--> <ul class="breadcrumb"> <li> <i class="fa fa-home"></i> <a href="{% url 'index' %}">首頁 </a> </li> <li> <!-- 子主選單 --> {% block lnav %} 選單導航 {% endblock %} </li> </ul> <!-- /麵包式導航頁 --> <!-- 當前主題 --> <div class="clearfix"> <h3 class="content-title pull-left"> {{ lnav }} </h3> </div> <!-- /當前主題 --> <!-- 當前主題描述 --> <div class="description"> {{ lcontent }} </div> <!-- /當前主題描述 --> </div> </div> <!-- 頁面內容設計 --> <div class="row col-lg-12"> {% block content %} <p>此處為主要內容</p> {% endblock %} </div> <!-- /頁面內容設計 --> <!-- 頂部 --> <div class="footer-tools"> <span class="go-top"> <i class="fa fa-chevron-up"></i> 頂部 </span> </div> <!-- /頂部 --> </div> <!-- 右側內容 --> </div> </div> </div> <!-- 右側 --> </section> <!--/主頁面設計 --> <!-- JAVASCRIPTS --> <!-- JQUERY UI,摺疊--> <!-- JQUERY UI--> <script src="/static/js/jquery-ui-1.10.3.custom/js/jquery-ui-1.10.3.custom.min.js"></script> <!-- BOOTSTRAP --> <script src="/static/bootstrap-dist/js/bootstrap.min.js"></script> <!-- DATE RANGE PICKER --> <script src="/static/js/bootstrap-daterangepicker/moment.min.js"></script> <script src="/static/js/bootstrap-daterangepicker/daterangepicker.min.js"></script> <!-- BLOCK UI 重新整理--> <script type="text/javascript" src="/static/js/jQuery-BlockUI/jquery.blockUI.min.js"></script> <!-- 表格 --> <script type="text/javascript" src="/static/js/datatables/media/js/jquery.dataTables.min.js"></script> <script type="text/javascript" src="/static/js/datatables/media/assets/js/datatables.min.js"></script> <script type="text/javascript" src="/static/js/datatables/extras/TableTools/media/js/TableTools.min.js"></script> <script type="text/javascript" src="/static/js/datatables/extras/TableTools/media/js/ZeroClipboard.min.js"></script> <!-- FLOT CHARTS --> <!-- <script src="/static/js/flot/jquery.flot.min.js"></script> <script src="/static/js/flot/jquery.flot.time.min.js"></script> <script src="/static/js/flot/jquery.flot.selection.min.js"></script> <script src="/static/js/flot/jquery.flot.resize.min.js"></script> <script src="/static/js/flot/jquery.flot.pie.min.js"></script> <script src="/static/js/flot/jquery.flot.stack.min.js"></script> <script src="/static/js/flot/jquery.flot.crosshair.min.js"></script> --> <!-- COOKIE --> <script type="text/javascript" src="/static/js/jquery.cookie.min.js"></script> <!-- CUSTOM SCRIPT --> <script src="/static/js/script.js"></script> <!-- <script> jQuery(document).ready(function() { App.setPage("base"); //Set current page App.init(); //Initialise plugins and elements }); </script> --> <!-- /JAVASCRIPTS --> </body> </html>View Code
② content.html 內容頁面,可以自己自由設計,本例子使用畫布佈局,展示幾個視覺化和表格的應用。
<!-- DASHBOARD CONTENT --> <div class="row"> <!-- COLUMN 1 --> <div class="col-md-6"> <div class="row"> <div class="col-lg-6"> <div class="dashbox panel panel-default"> <div class="panel-body"> <div class="panel-left red"> <i class="fa fa-instagram fa-3x"></i> </div> <div class="panel-right"> <div class="number">6718</div> <div class="title">Likes</div> <span class="label label-success"> 26% <i class="fa fa-arrow-up"></i> </span> </div> </div> </div> </div> <div class="col-lg-6"> <div class="dashbox panel panel-default"> <div class="panel-body"> <div class="panel-left blue"> <i class="fa fa-twitter fa-3x"></i> </div> <div class="panel-right"> <div class="number">2724</div> <div class="title">Followers</div> <span class="label label-warning"> 5% <i class="fa fa-arrow-down"></i> </span> </div> </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="quick-pie panel panel-default"> <div class="panel-body"> <div class="col-md-4 text-center"> <div id="dash_pie_1" class="piechart" data-percent="59"> <span class="percent"></span> </div> <a href="#" class="title">New Visitors <i class="fa fa-angle-right"></i></a> </div> <div class="col-md-4 text-center"> <div id="dash_pie_2" class="piechart" data-percent="73"> <span class="percent"></span> </div> <a href="#" class="title">Bounce Rate <i class="fa fa-angle-right"></i></a> </div> <div class="col-md-4 text-center"> <div id="dash_pie_3" class="piechart" data-percent="90"> <span class="percent"></span> </div> <a href="#" class="title">Brand Popularity <i class="fa fa-angle-right"></i></a> </div> </div> </div> </div> </div> </div> <!-- /COLUMN 1 --> <!-- COLUMN 2 --> <div class="col-md-6"> <div class="box solid grey"> <div class="box-title"> <h4><i class="fa fa-dollar"></i>Revenue</h4> <div class="tools"> <span class="label label-danger"> 20% <i class="fa fa-arrow-up"></i> </span> <a href="#box-config" data-toggle="modal" class="config"> <i class="fa fa-cog"></i> </a> <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"> <div id="chart-revenue" style="height:240px"></div> </div> </div> </div> <!-- /COLUMN 2 --> </div> <!-- /DASHBOARD CONTENT --> <!-- NEW ORDERS & STATISTICS --> <div class="row"> <!-- NEW ORDERS --> <div class="col-md-6"> <div class="box border"> <div class="box-title"> <h4><i class="fa fa-columns"></i> <span class="hidden-inline-mobile">Sales Tab</span></h4> </div> <div class="box-body"> <div class="tabbable header-tabs"> <ul class="nav nav-tabs"> <li class="active"><a href="#sales" data-toggle="tab"><i class="fa fa-bookmark"></i> <span class="hidden-inline-mobile">New Orders</span></a></li> <li><a href="#feed" data-toggle="tab"><i class="fa fa-rss"></i> <span class="hidden-inline-mobile">Recent Activities</span></a></li> </ul> <div class="tab-content"> <div class="tab-pane active" id="sales"> <div class="panel panel-default"> <div class="panel-body orders no-opaque"> <div class="scroller" data-height="450px" data-always-visible="1" data-rail-visible="1"> <ul class="list-unstyled"> <li class="clearfix"> <div class="pull-left">