實習總結

来源:http://www.cnblogs.com/0zcl/archive/2017/08/12/7337082.html
-Advertisement-
Play Games

前言:這篇博客主要講下這段時間遇到的小問題。比較雜,我自已當作總結了。 真是尷尬,實習之前我是後臺做的比較多,之前花了一個月較系統學了前端html,css,ajax,bootstrap這些,有興趣可以看看我之前寫的前端博客,感覺寫得還可以,對初學者的話。前程明亮-前端系列。學知識嘛,能系統地學習是最 ...


前言:這篇博客主要講下這段時間遇到的小問題。比較雜,我自已當作總結了。

真是尷尬,實習之前我是後臺做的比較多,之前花了一個月較系統學了前端html,css,ajax,bootstrap這些,有興趣可以看看我之前寫的前端博客,感覺寫得還可以,對初學者的話。前程明亮-前端系列。學知識嘛,能系統地學習是最好的,出現問題比較容易分析。過去一個月主要是做前端的,so 這篇博客主要寫前端部分。

一、Echarts

echarts是百度開發維護的一個 可視化插件。可視化在系統開發中相當重要,比如現在公司在開發的運維繫統DBMS, 監控告警系統,前端都要根據後臺傳的數據,利用如echarts, vis.js插件將數據可視化。啥也不多說了,直接看官網吧http://echarts.baidu.com/index.html。第一次看感覺很牛逼! 而且文檔還是中文的!! 即然是中文的,肯定能看懂啦。

在看官網時,有下麵的例子:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>ECharts</title>
 6     <!-- 引入 echarts.js -->
 7     <script src="echarts.js"></script>
 8 </head>
 9 <body>
10     <!-- 為ECharts準備一個具備大小(寬高)的Dom -->
11     <div id="main" style="width: 600px;height:400px;"></div>
12     <script type="text/javascript">
13         // 基於準備好的dom,初始化echarts實例
14         var myChart = echarts.init(document.getElementById('main'));
15 
16         // 指定圖表的配置項和數據
17         var option = {
18             title: {
19                 text: 'ECharts 入門示例'
20             },
21             tooltip: {},
22             legend: {
23                 data:['銷量']
24             },
25             xAxis: {
26                 data: ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"]
27             },
28             yAxis: {},
29             series: [{
30                 name: '銷量',
31                 type: 'bar',
32                 data: [5, 20, 36, 10, 10, 20]
33             }]
34         };
35 
36         // 使用剛指定的配置項和數據顯示圖表。
37         myChart.setOption(option);
38     </script>
39 </body>
40 </html>
View Code

用瀏覽器打開如下圖:

非同步載入

入門示例中的數據是在初始化後setOption中直接填入的,但是很多時候可能數據需要非同步載入後再填入ECharts 中實現非同步數據的更新非常簡單,在圖表初始化後不管任何時候只要通過 jQuery 等工具非同步獲取數據後通過 setOption 填入數據和配置項就行。下麵是官網的代碼:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <script src="echarts.js"></script>
 7     <script src="../bootstrap-3.3.7-dist/js/jquery-3.1.1.min.js"></script>
 8 </head>
 9 <body>
10     <!-- 為ECharts準備一個具備大小(寬高)的Dom -->
11     <div id="main" style="width: 600px;height:400px;"></div>
12     <script type="text/javascript">
13 
14         var myChart = echarts.init(document.getElementById('main'));
15         // 顯示標題,圖例和空的坐標軸
16         myChart.setOption({
17             title: {
18                 text: '非同步數據載入示例'
19             },
20             tooltip: {},
21             legend: {
22                 data:['銷量']
23             },
24             xAxis: {
25                 data: []
26             },
27             yAxis: {},
28             series: [{
29                 name: '銷量',
30                 type: 'bar',
31                 data: []
32             }]
33         });
34 
35         // 非同步載入數據
36         $.get('data_test.json').done(function (data) {
37             // 填入數據
38             myChart.setOption({
39                 xAxis: {
40                     data: data.categories
41                 },
42                 series: [{
43                     // 根據名字對應到相應的系列
44                     name: '銷量',
45                     data: data.data
46                 }]
47             });
48         });
49 
50     </script>
51 </body>
52 </html>

當然,我在html文件的同級目錄下,也放下data_test.json文件:上面html代碼36行是通過ajax的GET請求,到data_test.json文件取數據,然後可以通過data.xxx調用json文件的數據。

{
    "categories": [
        "襯衫",
        "羊毛衫",
        "雪紡衫",
        "褲子",
        "高跟鞋",
        "襪子"
    ],
    "data": [
        5,
        20,
        36,
        10,
        10,
        20
    ]
}

但是我找到HTML文件,用瀏覽器打開,數據載入不出來:

這就懵比了,懷疑人生。看了下瀏覽器的錯誤信息:

WEB開發過程中,很多時候我們都是寫一些簡單的Demo,並不是開發一個完整項目,此時我們常見的操作是:

  • 新建文件夾
  • 新建需要的文件
  • 在Sublime(或其他編輯器)中完成DEMO的編碼
  • 雙擊HTML文件,直接在瀏覽器中運行演示

如果此時Demo中有AJAX操作,瀏覽器就會報一個錯:
XMLHttpRequest cannot load file:///Users/iceStone/Documents/Learning/angular/demo/angular-moviecat/movie/view.html. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
原因很簡單,瀏覽器(Webkit內核)的安全策略決定了file協議訪問的應用無法使用XMLHttpRequest對象,錯誤消息中也很清楚的說明瞭:
Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
跨域請求僅支持協議:http, data, chrome, chrome-extension, https, chrome-extension-resource

so, 我理解上面的意思是 因為HTML文件裡面有ajax方法,你直接右鍵html文件,用瀏覽器打開是無法成功執行ajax方法的。你沒有類似於伺服器的東西。

最後我是直接用pycharm IDE打開的本地的echarts5.html,瀏覽器網址如下:

看到沒,本地埠63342,後面還帶了一堆參數,這其實是IDE用我們的本地電腦埠開的一個埠,當作"服務端"。

 

二、removeClass

移除class樣式,一般我們只需移除一個class, eg:hidden. 但之前有個需求,要移除一個標簽兩個class樣式,怎麼做? 查了下jquery的API,果然找到了

要從每個匹配的元素的 class 屬性中移除的一個或多個 class 名稱,多個 class 名稱用空格分隔

 

三、資料庫導入sql表

一天部門老大,給我發了份sql表,讓我更新下,我也不知咋更新到資料庫,氣氛相當尷尬。

mysql> use bigo_cmdb
mysql> source /tmp/instance_meta_info.sql;

說到底還是Linux不夠6唄~_~

 

四、Django後臺如何傳數據給前端JS

這個問題是我用vis.js插件做拓撲圖時遇到的,說到拓撲圖,不禁得吹下牛,真得很屌,明天回公司去截個圖給發上來。多個mysql之間有主從關係,我可以用箭頭表示之間的關係(通過後臺資料庫的ID判斷誰指向誰),前端我還自己寫了JS生成拓撲圖。有興趣的可以留言,我可以分享部分代碼。說多了,生成拓撲時我前端的javascript需要後端返回的數據,尼瑪,一般是在html中獲取後臺返回的數據,要返回給JS,還真沒遇過:

Django 數據json格式傳輸js

  • 把一個 list 或者 dict 傳遞給 js文件,處理後顯示到網頁上,  直接在視圖函數(views.py中的函數)中渲染一個 list 或 dict 的內容,和網頁其它部分一起顯示到網頁上,一次請求一次傳輸。
  • views.py中返回的函數中的值要用 json.dumps(xx)處理,參數xx需要字典或者列表。
  • 在網頁上要加一個 safe 過濾器。


大致的流程
1、第一步,在view.py渲染

 1 # -*- coding: utf-8 -*-
 2 from __future__ import unicode_literals
 3 import json
 4 from django.shortcuts import render
 5 def home(request):
 6     List = ['列表1', '列表2']
 7     Dict = {'鍵1': '值1', '鍵2': '值2'}
 8     return render(request, 'home.html', {
 9             'List': json.dumps(List),
10             'Dict': json.dumps(Dict)
11         })

2、第二步,對應需要跳轉的網頁home.html : 

1  <script type="text/javascript">
2     var List = {{ List|safe }};//列表
3     var Dict = {{ Dict|safe }};//字典
4  </script>

ps: 註意分號不要漏了,需要模板語言兩個大括弧{{ }};  

可參考: http://blog.csdn.net/agly_clarlie/article/details/50551807

 

五、Bootstrap-select

官網移步: http://silviomoreto.github.io/bootstrap-select/examples/ 

我對bootstrap-select算是有一定瞭解。為何? 這就要從模態框說起了,因為之前是在做運維繫統,涉及到很多模態框。一個月前剛入職其實都還沒瞭解模態框這鬼東西~_~ 模態框== 彈出框(我的理解)。先來學習下模態框: 移步bootstrap官網http://v3.bootcss.com/javascript/#modals

這是我之前根據官網博客寫的小demo:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>Bootstrap 實例 - 模態框(Modal)插件</title>
 6     <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
 7 
 8 </head>
 9 <body>
10 
11 <h2>創建模態框(Modal)</h2>
12 <!-- 按鈕觸發模態框 -->
13 <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
14     開始演示模態框
15 </button>
16 <!-- 模態框(Modal) -->
17 <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
18     <div class="modal-dialog">
19         <div class="modal-content">
20             <div class="modal-header">
21                 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
22                     &times;
23                 </button>
24                 <h4 class="modal-title" id="myModalLabel">
25                     模態框(Modal)標題
26                 </h4>
27             </div>
28             <div class="modal-body">
29                 在這裡添加一些文本
30             </div>
31             <div class="modal-footer">
32                 <button type="button" class="btn btn-default" data-dismiss="modal">關閉
33                 </button>
34                 <button type="button" class="btn btn-primary">
35                     提交更改
36                 </button>
37             </div>
38         </div><!-- /.modal-content -->
39     </div><!-- /.modal -->
40 </div>
41 
42 <script src="../bootstrap-3.3.7-dist/js/jquery-3.1.1.min.js"></script>
43 <script src="../bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
44 
45 <!--
46 <script>
47     // 只需要點擊 ESC 鍵,模態視窗即會退出。
48     $(function() {
49         $('#myModal').modal({
50             keyboard: false
51         })
52     });
53 </script>
54 -->
55 
56 <script>
57 $(function() {
58     $('#myModal').modal('hide')
59 });
60 </script>
61 
62 <script>
63 $(function() {
64     $('#myModal').on('hide.bs.modal',
65     function() {
66         alert('嘿,我聽說您喜歡模態框...');
67     })
68 });
69 </script>
70 
71 </body>
72 </html>

其實bootstrap已經封裝得很牛逼了。模態框說白了就是一個div,但是它有個屬性class="modal",div裡面就是modal-content,通俗理解就是模態框的內容,內容又細分為三部分

  • modal-header
  • modal-body (modal是模態框的重點,一般用來放form表單)
  • modal-footer

如果一個界面有多個模態框,你如何知道擊A按鈕就打開A模態框,而不是B模態框?? 很簡單阿

data-target="#myModal"

給button加上data-target屬性,屬性值為需要打開的模態的的ID.

手動打開模態框。在模態框顯示之前返回到主調函數中 (也就是,在觸發 shown.bs.modal 事件之前)。

$('#myModal').modal('show')

手動隱藏模態框。在模態框隱藏之前返回到主調函數中 (也就是,在觸發 hidden.bs.modal 事件之前)。

$('#myModal').modal('hide')

事件

Bootstrap 的模態框類提供了一些事件用於監聽並執行你自己的代碼。

All modal events are fired at the modal itself (i.e. at the <div class="modal">).

事件類型描述
show.bs.modal show 方法調用之後立即觸發該事件。如果是通過點擊某個作為觸發器的元素,則此元素可以通過事件的 relatedTarget 屬性進行訪問。
shown.bs.modal 此事件在模態框已經顯示出來(並且同時在 CSS 過渡效果完成)之後被觸發。如果是通過點擊某個作為觸發器的元素,則此元素可以通過事件的 relatedTarget 屬性進行訪問。
hide.bs.modal hide 方法調用之後立即觸發該事件。
hidden.bs.modal 此事件在模態框被隱藏(並且同時在 CSS 過渡效果完成)之後被觸發。
loaded.bs.modal 遠端的數據源載入完數據之後觸發該事件。
$('#myModal').on('hidden.bs.modal', function (e) {
  // do something...
})

 

模態框學習告一段落,具體移步官網。

先回顧下原本的需求:

現在系統有一個mysql實例(包括很多信息IP, sql版本, 運維負責人....),我點擊編輯按紐。比如下圖:我點擊按鈕後彈出模態框如下圖,怎麼打開呢?肯定是調用一個onclick方法,JS方法裡面再讓模態框show一下。具體代碼現在沒有,明天回公司到SVN找找看。當然,不止編輯按紐,還有新增按鈕,點擊新增按紐也需要打開一個模態框,和下圖一樣佈局與樣式,新增的模態框的代碼 複製 編輯模態框的代碼就OK?傻呀,這代碼太多了,所以稍微時智的方法就是新增框與編輯框用同一個模態框modal。

 

新增框與編輯框有不同,就是新增框form表單裡面的input,select標簽是沒有數據的,編輯框是一調用onclick方法,前端發起Ajax方法,後臺返回數據,前端再寫JS給編輯框的form表單裡面的input,select標簽添加value

 

先點擊編輯按紐,打開模態框,關閉,再點擊新增按鈕,猜猜發生啥?天吶! 新增框裡面有編輯框“殘留”的數據。為什麼呢?因為你關閉編輯模態框的時候沒有清空form表單的數據。

如何清空form表單的數據,input標簽很簡單,令其value=""便可以,但是select標簽就麻煩了。這裡的select標簽有使用了流行的bootstrap-select插件。待續……

 

 

六、ImportError: No module named runner

使用ansible api setup 收集伺服器配置信息。公司是用python2.7 + django1.8版本開發,比較low....

from ansible.runner import Runner 出現ImportError: No module named runner
經一番折騰後發現原來是ansible版本升級後沒有此模塊,降為ansible 1.7.2後正常
新版本以後再折騰

 

七、雜

1、 Python 的內建函數 locals()

如果你是個喜歡偷懶的程式員並想讓代碼看起來更加簡明,可以利用 Python 的內建函數 locals() 。它返回的字典對所有局部變數的名稱與值進行映射。因此,前面的視圖可以重寫成下麵這個樣子:

def current_datetime(request):
    current_date = datetime.datetime.now()
    return render_to_response('current_datetime.html', locals())

上面的代碼等於下麵的

def current_datetime(request):
    now = datetime.datetime.now()
    return render_to_response('current_datetime.html', {'current_date': now})

2、That port is already in use.

我是在Linux下用pycharm開發的,資料庫的API是用本地的8000埠,有時會出現8000埠已被使用。

netstat -ntlp

It will show something like this.

   Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State           PID/Program name    
tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      6599/python         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      -                   
tcp        0      0 192.168.124.1:53        0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::3306                 :::*                    LISTEN     

So now just close the port in which Django/python running already by killing the process associated with it.

kill -9 PID

in my case

kill -9 6599

Now run your Django app.

可參考:https://stackoverflow.com/questions/20239232/error-that-port-is-already-in-use

 

 

後期我沒有使用模態框,在老大的建議下改用了layer彈出框,關於layer可以寫的東西太多了,我打開留在下一篇博客寫。下下篇博客會寫表單驗證,表單驗證自己的折騰了很久,學習了很多驗證的插件,都遇到一些問題,最後選用了jquery.validate.js插件。我自己封裝了一個Layer+Jquery.validate.js+Ajax的方法,為部門開發的DBMS和監控項目節省了超多的代碼。

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 package cn.fraudmetrix.octopus.horai.biz.utils; 2 3 import java.security.MessageDigest; 4 import java.security.NoSuchAlgorithmException; 5 6 public ...
  • 1 package cn.fraudmetrix.octopus.horai.biz.utils; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Collections; 6 import ...
  • submit方式: 1 <form id="postForm" name="postForm" action="${rc.contextPath}/backdoor/uploadGroovy/upload" 2 enctype="multipart/form-data" method="post"> ...
  • 一、HashMap概述 二、HashMap的數據結構 三、HashMap源碼分析 1、關鍵屬性 2、構造方法 3、存儲數據 4、調整大小 5、數據讀取 6、HashMap的性能參數 7、Fail-Fast機制 ...
  • 報錯:'0.80454153 is not JSON serializable' 輸出y_pred_prob的類別:<type 'numpy.float32'> 參考https://stackoverflow.com/questions/27050108/convert-numpy-type-to- ...
  • cos是O'Rrilly公司開發的一款用於HTTP上傳文件的OpenSource組件 需要cos.jar,下載地址:http://www.servlets.com/cos/ cos上傳文件很簡單,比fileupload還簡單:但是上傳最大我試了試,是800多兆,超過直接崩潰: java.io.IOE ...
  • UVA - 1629 ans[t][b][l][r]表示t到b行,l到r列那一塊蛋糕切好的最小值d[t][b][l][r]表示t到b行,l到r列區域的櫻桃數,需要預處理 ...
  • 第一步:搭建配置新的虛擬機 格式化之前先把tmp目錄下所有與Hadoop有關的信息全部刪除 rm -rf /tmp/hadoop-centos* 開啟之後jps只有Java的進程:sudo vi /etc/hosts 裡面加 bogon 1.sudo賦權 Root用戶 vi /etc/sudoers ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...