接于上一篇,這一篇主要記錄如何鏈接mysql數據庫以及從數據庫中調用數據信息到頁面,同時包含百度地圖api的一些使用。
其中包括模塊,echert圖表繪制數據調用,百度地圖數據信息調用以及一些單機效果,頁面數據調用等。
1.頁面數據調用:
首先要建數據庫,我們用的是mysql,所以要改寫setting.py中DATABASE模塊,(django默認是sqllit)
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'bikeData', #數據庫名'USER': 'root','PASSWORD': 'helloworld','HOST': '127.0.0.1','PORT': '3306',}
}
然后鏈接并創建數據庫,通過modos.py映射sql語句創建數據庫(以user創建為例)
- 每個模型是?
django.db.models.Model
?的一個Python子類。 - 該模型的每個屬性都代表一個數據庫字段。
- 有了這一切,Django給你自動生成數據庫的訪問API;
from django.db import models
from django.contrib import admin
# Create your models here.#用戶信息
class User(models.Model):username = models.CharField(max_length=50)password = models.CharField(max_length=50)
這里出現出現的CharField, DateField, TextField都是Django用于儲存數據字段的Filed子類。你或許需要看一下官方文檔(https://docs.djangoproject.com/en/1.11/ref/models/fields/)里的說明。
先在modos窗創建相應的類,然后在到manage.py所在的目錄中(cmd)打開dos操作窗口執行以下操作
python manage.py makemigrations?(數據庫名) (本機是python36 manage.py makemigrations,因為多版本的原因需要區分)
python manage.py?migrate (數據庫名)
?
當然,反著來也可以,我們可以根據數據庫中的表反向創建modos文件,如下:
Django引入外部數據庫還是比較方便的,首先在setting里面設置你要連接的數據庫類型和連接名稱,地址之類,和創建新項目的時候一致?
運行下面代碼可以自動生成models模型文件?
python manage.py inspectdb?
這樣就可以在命令行看到數據庫的模型文件了
把模型文件導入到app中?
創建一個app?
django-admin.py startapp app?
python manage.py inspectdb > app/models.py?
ok模型文件已經生成好了。下面的工作就和之前一樣了
注意,如果你在數據自己的數據表你也可以自己手動創建modos,
django重數據庫中取出的數據的基本操作查文檔(values(),get(),all())等,注意它們的返回格式以及參數。valuse()的返回可以當做list處理。
用于頁面傳輸和展示的數據建議以鍵值對的形式,json或者dict的形式,便于在頁面上按需要調用。同時在python、以及js中對字典的讀取是,dict['XXX'],而在html中對傳過來的數據的讀取是dict.xxx。
如果在html中想要在外部鏈接的js中使用后臺傳過的數據可以現在<head>中創建以及js對象,eg:
<head>
<script type="text/javascript">var MyChartVar = {chart1_data1:{{ chart1.data1|safe }},chart1_data2:{{ chart1.data2|safe }},chart2_data1:{{ chart2.data1|safe }},chart2_data2:{{ chart2.data2|safe }},chart2_data3:{{ chart2.data3|safe }},map_data:{{ mapdate.data|safe }},}</script>
</head><script type="text/javascript" scr="js/mm.js" ></script>
這樣mm.js中就能直接調用了(調用map_data)
var datas = MyChartVar['map_data'];
具體要什么就要按dict的模式調用什么。
?
2.百度地圖api通過數據庫添加點位并點擊效果
// 編寫自定義函數,創建標注function addMarker(point){var marker = new BMap.Marker(point);map.addOverlay(marker);}var datas = MyChartVar['map_data']; //將后臺數據轉接過來var points = [];for (var i = 0; i<datas.length; i++){var point = new BMap.Point(datas[i]['lng'],datas[i]['lat']); //遍歷并創建地圖點addMarker(point); //先將點位展示point.id = datas[i]['stationid']; //分別將有需要的信息存儲,便于調用point.name = datas[i]['stationname'];point.lng = datas[i]['lng'];point.lat = datas[i]['lat'];point.zonename = datas[i]['zonename'];point.bikecount = datas[i]['bikecount'];point.max = datas[i]['max'];points.push(point);};var pointCollection = new BMap.PointCollection(points); //用pointcollection來存儲帶信息的點,這樣不用在單機事件的時候循環遍歷點來取出相應的信息。pointCollection.addEventListener('click', function (e) {
// alert('單擊點的坐標為:' + e.point.lng + ',' + e.point.lat); // 監聽點擊事件var opts = {width: 100, // 信息窗口寬度height: 130, // 信息窗口高度title: "站點信息", // 信息窗口標題enableMessage: true,//設置允許信息窗發送短息enableAutoPan: true};var infowindow = new BMap.InfoWindow(e.point.name + ':' + e.point.id+'</br>'+'所屬片區:'+e.point.zonename+'</br>'+'最大容量:'+e.point.max+'</br>'+'可借車輛:'+e.point.bikecount, opts);var positions = new BMap.Point(e.point.lng,e.point.lat); //彈窗的定位map.openInfoWindow(infowindow, positions); //是彈出每次出現在相應點上});map.addOverlay(pointCollection)
?