整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          游戲雙端程序員轉行互聯網后端半年,所接觸到的新技術們

          游戲雙端程序員轉行互聯網后端半年,所接觸到的新技術們

          近剛優化完Django后臺界面JSON格式數據的展示,讓我感受到一點小小成就感。優化過程中,我特別想寫一篇技術博客,說一說整個實現流程;待功能做完,又感覺似乎能說的內容極少——這個優化,是很簡單的。(我常有類似感受,一個東西花了很長時間才處理掉,處理完畢之后會覺得如此簡單并開始質疑自己如何花了許多時間?)


          // 有中文的JSON

          {"insun": "\u6cf0\u56e7 / \u4eba\u5728\u56e7\u90142 / Lost in Thailand "}

          JSON數據,包含中文之后看起來亂亂的,會影響我工作效率。我想明白它的具體內容,需要將它的內容復制到一個工具網站上進行查看。我要將這復制粘貼再點一下的過程去掉,我要我所見到的是我能看懂的!


          谷歌了一下,似乎做這個優化的程序員并不多,只有一個叫做Django-JSONEditor的自定義控件可用。


          按照作者的步驟能夠很方便的將問題解決。我因為上面的一個廣告按鈕而拒絕使用,我以為這廣告是Django-JSONEditor加上的,于是自己模仿它的實現做一個自定義控件將其搬到Django中。搬的過程遇見靜態資源加載不出來的情況,又一通谷歌,彎彎繞繞的在Django層處理。


          待這一步做完,發現廣告按鈕依然在,才發現是藏在JSON Editor中的物件,將JS文件中的對應代碼干掉,便沒有廣告了。于是知道前端的內容,發布到互聯網是會壓縮打包的。


          本機環境OK后,部署到測試機上,發現靜態資源依然不在,這讓我接觸到Nginx。理解Nginx的(極小部分)使用方式,將它搞定,至此優化結束。


          GitHub上的效果圖

          怎么說呢?轉行之后,除了主要使用語言(Python)與敲代碼的風格(可能可以說是設計模式吧)不變,我是接觸到許多新技術的。


          蘋果電腦與Git,是已經可以熟練使用的基礎工具。


          HTTP協議,感覺已經快有一個大概框架印在心中。以看書的方式了解全局框架之后會是TCP與IP的學習。


          Docker(容器),認識到它是什么并能進行基礎運用。在容器的上層,據說還有管理容器的集群(K8S)。


          Nginx,是剛接觸的。現階段可以看懂它的基礎配置,能夠稍微改改,但自己寫就還差點意思。


          HTML與JS,似乎已經藏在幾個很復雜的框架后面,要想看到它們,必須先熟悉框架。


          許多的我沒了解到的內容在等待我去發現。


          半年以來,一直在不停地拓展知識廣度,我的Python深度之旅,斷斷續續。謹以此篇說明,我的內功修煉之路,是在前行的。


          未來還長,未完待續。


          引用鏈接


          JSON Editor的GitHub地址:https://github.com/json-editor/json-editor


          Django-JSONEditor,有人封裝的Django版本,按照上面的指引,可以很快用起來:https://github.com/nnseva/django-jsoneditor


          在線JSON轉義工具:https://c.runoob.com/front-end/53/


          用一年時間如何能掌握 C++ ?:https://www.zhihu.com/question/23933514/answer/26290066

          本文件的批量性操作,Excel催化劑已經有非常多的功能,常聽說許多人對Excel催化劑的印象是功能太雜,但試問,不是活在真空世界中做數據分析,面對一大堆雜亂的數據環境,沒有足夠“雜”的功能來應付,真的可以稱得上數據神器么?

          本篇的兩個小功能,處理下一般數據采集獲取到的非理想文本數據:帶unicode字符串的文本和帶html特殊符號的文本。這些功能也是從實際需求中來。為了讓數據處理更加得心應手,功能仍然不斷新增。

          網頁采集數據常有的不完善

          一、html編碼問題

          這里說的網頁采集,當然可以最原始的從網頁上復制粘貼回來的數據,更自動化的,就是使用網頁采集工具批量性獲取到的數據。

          網頁html文本,有轉義字符如: <(小于號<) 、 >(大于號>) 、 (空格)等,這些因為html上有特定的含義,需要轉義成其他輸入字符。

          更多的可見下文截圖:


          最終我們還原后,應該得到下面的文本才是想要的。

          二、Unicode格式文本

          我們采集到的數據中,可能會是以下展示的樣式,非英文、數字的比如中文,用了Unicode字符表示(\u開頭的)。


          我們需要這樣的格式,才是人閱讀和使用的文本。

          解決辦法

          既然這么大的共性情況,肯定是將它落實到功能上固化,有再次出現時可以立馬解決,這就是Excel催化劑越來越“雜”的由來。

          處理一個文件,你說在線轉換下就可以,處理100個、1000個呢,還會這樣去做嗎?在Excel催化劑里,必然是批量性操作最佳使用場合。

          自定義函數處理Excel單元格內容

          如果數據已經落到Excel的單元格里,在做網頁采集功能時,其實已經將此成套的網頁采集相關會用到的功能都做成了自定義函數。

          如下的將html的轉義字符解碼

          同樣地,Unicode字符串還原為原字符,也有自定義函數。

          除此以外,還有大量的轉換Utf8、從json提取、從xml提取指定元素、Url轉碼和還原等一大堆自定義函數。

          上述自定義函數使用場景,數據源在Excel單元格或提取結果存儲在Excel單元格,另如果是對整個文件的轉換,就是本篇開發的兩個小功能。

          使用非常簡單,選擇一個或多個待轉換的文本文件路徑單元格,當只選擇待轉換時,轉換后的結果覆蓋原文件,選擇兩列時,右側列為轉換結果生成新文本,建議采用新生成文件方式。

          任何覆蓋原始文件的操作均有數據風險,無法恢復數據初始狀態,不是一個好的科學的數據管理方式。

          結語

          小功能有大智慧,你能感受到了嗎?盼望Excel催化劑的使用者,會因為其功能的不斷新增而驚喜,因為又有新的繁瑣操作被簡單固化了。

          看到小小的Excel催化劑包含這么多的功能,來應對各種數據采集、處理、分析各環節的痛點,希望催化劑的使用者們,都有慧眼,不用再相信培訓機構所吹噓的培訓一小時,從此不加班的收割式的忽悠大法。

          應對功能越來越多,請始終堅守最佳的Excel催化劑使用方法:搜索+筆記,用到時即搜即得,日常追更下文章。寫文章者1小時,讀文章者2分鐘即可。

          路是方向,代碼是時間,知識需積累,經驗需摸索。希望對大家有用,有錯誤還望指出。

          HttpResponse 的其他使用方法和注意事項。

        1. 返回 JSON 數據
        2. 除了返回字符串和二進制數據以外,HttpResponse 還可以返回 JSON 格式的數據。這通常用于構建 Web API,讓客戶端能夠方便地獲取數據并進行處理。

          下面是一個返回 JSON 數據的例子:

          import json
          from django.http import HttpResponse
          
          def my_api(request):
              data={'foo': 'bar', 'baz': [1, 2, 3]}
              json_data=json.dumps(data)
              
              response=HttpResponse(json_data, content_type='application/json')
              return response

          在這個例子中,我們首先使用 Python 自帶的 json 模塊將一個字典轉換成 JSON 格式的字符串,然后將其作為響應內容傳遞給 HttpResponse 對象。最后,我們設置 content_type 參數為 application/json,表示該響應是一個 JSON 格式的數據。

          1. 使用 HttpResponseRedirect

          除了 HttpResponse 以外,Django 還提供了其他一些響應類來方便我們進行重定向、錯誤處理等操作。其中,HttpRedirect 是用于重定向的響應類之一。

          例如,如果我們希望將用戶重定向到另一個 URL 上,可以這樣寫:

          from django.http import HttpResponseRedirect
          
          def my_view(request):
              return HttpResponseRedirect('/another-url/')

          在這個例子中,我們創建了一個 HttpResponseRedirect 對象,并將其目標 URL 設置為 /another-url/。當客戶端收到該響應時,它會自動跳轉到該 URL,并展示相應的內容。

          1. 使用 StreamingHttpResponse

          除了直接返回整個響應內容以外,Django 還提供了 StreamingHttpResponse 類,可以用于按需生成、傳輸響應內容。這對于處理大量數據或需要逐步生成響應內容的場景非常有用。

          例如,如果我們希望生成一個包含隨機數的 CSV 文件并將其作為響應傳遞給客戶端,可以這樣寫:

          import csv
          import random
          from django.http import StreamingHttpResponse
          
          def generate_csv():
              yield 'id,value\n'
              
              for i in range(100000):
                  value=random.randint(1, 1000)
                  yield f'{i},{value}\n'
          
          def my_view(request):
              response=StreamingHttpResponse(generate_csv(), content_type='text/csv')
              response['Content-Disposition']='attachment; filename="data.csv"'
              return response

          在這個例子中,我們定義了一個名為 generate_csv 的生成器函數,它會按照 CSV 格式生成一系列隨機數,并逐行生成響應內容。然后,我們使用 StreamingHttpResponse 類創建一個流式響應對象,并將生成器函數作為參數傳遞給該對象。最后,我們設置 content_type 參數為 text/csv,表示該響應是一個 CSV 格式的文件,并使用 Content-Disposition 頭信息告訴客戶端該響應應該被下載保存。

          1. 注意 XSS 攻擊

          最后,需要特別注意的是,在編寫 HttpResponse 代碼時,我們需要注意防止跨站腳本攻擊(XSS)。XSS 攻擊是指攻擊者通過在網頁中注入惡意腳本來攻擊用戶瀏覽器的一種漏洞。

          為了防止 XSS 攻擊,我們應該始終對響應內容進行轉義,并使用相應的安全函數來處理輸入數據。例如,在 Django 中,可以使用 escapejs 和 escapeHTML 函數來分別對 JavaScript 和 HTML 進行轉義。

          from django.http import HttpResponse
          from django.utils.html import escape
          
          def my_view(request):
              data=request.GET.get('data')
              escaped_data=escape(data)
              
              response=HttpResponse(f'You entered: {escaped_data}')
              return response

          在這個例子中,我們通過 request.GET.get 方法獲取了一個名為 data 的 GET 參數,并使用 escape 函數對其進行了 HTML 轉義。然后,我們將轉義后的數據作為響應內容返回給客戶端。這樣就可以避免惡意腳本被注入到響應內容中,從而保護用戶的安全。

          另外,Django 還提供了一些安全函數來幫助我們防止 XSS 攻擊。以下是一些常用的安全函數:

          • escape:對 HTML 進行轉義。
          • escapejs:對 JavaScript 進行轉義。
          • mark_safe:將字符串標記為安全的 HTML 或 JavaScript 代碼。

          例如,在 Django 模板中,我們可以使用如下方式對變量進行轉義:

          <p>{{ my_variable|escape }}</p>

          在這個例子中,我們使用了模板語法中的過濾器,將 my_variable 變量的值進行了 HTML 轉義。這樣即使該變量包含惡意腳本,也不會對用戶造成威脅。

          總之,XSS 攻擊是一種非常嚴重的漏洞,我們應該時刻注意防范,并采取相應的措施來保護用戶的安全。


          主站蜘蛛池模板: 中字幕一区二区三区乱码| 日韩在线一区二区三区视频| 香蕉视频一区二区| 国产精品一区在线麻豆| 伊人久久一区二区三区无码| 日韩在线一区二区| 欧洲精品一区二区三区| 熟妇人妻一区二区三区四区| 国产成人无码一区二区在线播放| 蜜臀AV免费一区二区三区| 精品人妻无码一区二区色欲产成人 | 本免费AV无码专区一区| 69久久精品无码一区二区| 国产免费av一区二区三区| 免费日本一区二区| 欧洲精品码一区二区三区免费看 | 亚洲av无码成人影院一区 | 无码人妻精品一区二区三区99不卡| 亚洲福利精品一区二区三区| 亚洲视频一区二区三区| 午夜无码一区二区三区在线观看| 自慰无码一区二区三区| 国产精品亚洲一区二区在线观看| 国产丝袜无码一区二区三区视频| 久久久久久人妻一区二区三区| 国产成人精品无码一区二区三区 | 国产一区二区影院| 国产韩国精品一区二区三区久久| 丝袜人妻一区二区三区| 日本一区二区三区精品国产 | 国产高清在线精品一区二区| 欧美成人aaa片一区国产精品| 亚洲香蕉久久一区二区三区四区| 无码精品人妻一区二区三区影院| 精品国产亚洲一区二区三区在线观看 | 亚洲一区二区三区精品视频| 亚洲一区二区成人| 亚洲第一区视频在线观看| 精品无人区一区二区三区在线| 亚洲福利电影一区二区?| 国产午夜精品片一区二区三区|