找出 File System 中最大的檔案
|
|
很常用到的 function,可是三不五時都要去尻以前的 Code 來用有點麻煩
乾脆直接寫在這,以後來這邊尻!
|
|
|
|
|
|
|
|
要注意 python 的 datetime.timetuple 物件並沒有包含 timezone 資訊,
所以如果想把帶有 tzinfo 的 datetime 物件轉出 utc 會有一些問題。
看看以下例子。
所以我們來做個實驗
|
|
疑?兩個一樣捏,我不是已經把 br_local_date 掛上 tzinfo 了嗎?
我不是應該拿到台灣當地時間 2016-08-20 11:21:00 的 utc
跟巴西聖保羅當地時間 2016-08-20 11:21:00 的 utc 嗎?
因為 time.mktime 會拿你本地系統時區去轉 timestamp,不是看 tzinfo。
而 calendar.timegm 不會自動幫你加時區。
所以做法就是要先把帶有 tzinfo 的 datetime 物件轉到 utc timezone,
再透過 calendar + datetime.utctimetuple() 把正確的 timestamp 轉出來!
這個雷踩過幾次,要特別小心。
想把巴西當地時間的 2016-08-20 11:21:00 轉成 utc 的完整範例:
最近收到了一些 Request 要把之前用 Django Admin 搞的後台做一些 improve
雖然用了 Django 一陣子可是覺得自己還是只懂皮毛而已,還有蠻多奇奇怪怪的功能都沒用過
之前就聽說 Admin 的 layout 除了常見的那些欄位跟 filter 顯示,
其他都可以客製化,可是改起來頗麻煩,剛好趁這次機會紀錄一下改法。
其實官網文件都有寫,不過我還是先從思考方向先記錄起。
首先我從 source code 下手想看看 Admin 裡面到底是怎麼把各 page render 出來,
到底哪些東西是可以調哪些不能調,個人覺得這招搭配看文件很有用。
所以就直接殺到的 django/contrib/admin/templates/
哦!沒錯就是這邊!
Admin 的各種 template 全都放在這,看來就是從這下手了!
以我這次要改的部分叫做 submit_line.html
為例,
我想透過參數去控制 submit row 在某些 model 下會出現新的客製 action。
所以我就看到 django/contrib/admin/templatetags/admin_modify.py
發現裡面有一個 function 是來控制這件事,
先附上 code:
看到這邊就得到我的結論:Submit row 的按鈕都可以透過 admin.py 的參數設定去做開關,但是只限於原本就有的那些 action,如果你要新增 action button 或是某些特殊邏輯才 show 的話還是要透過 overwrite 的方式去做才可以!
從剛剛的 source code 看到我要做兩件事,自訂 template 跟 自訂 tag
開一個資料夾 MYAPP/templates/admin
把要 overwrite 的 template 丟進去
change_form.html
這邊可以發現我定義了一個 tag 叫做 custom_submit_line
並且把原本在 admin/change_form.html
內的
|
|
submit_row
overwrite 成 custom_submit_line
custom_submit_line.html
最後別忘了在 settings.py
內設定一下 TEMPLATES 的 DIR 參數
不然會噴 not found 的錯誤!
官網文件 Custom template tags and filters
開一個資料夾 MYAPP/APP_NAME/templatetags
把要 overwrite 的 tag 丟進去
custom_submit_line.py
|
|
跟原本的長很像我只有在最後做了一些邏輯,
然後把 template 換成 custom_submit_line.html
如此而已!
這樣就完成了客製化工作啦~
Trace 了 source code 之後發現幾乎每一個頁面都可以客製化,真心覺得 django admin 很方便,
幫我處理掉了很多冗事,但是它裡面的邏輯很多都設計好了,要改的話要小心把預設的邏輯改爆。
如果真的要改很大的話,也許自己寫會方便許多,按照專案需求決定會是比較好的選擇!
有的時候因為 MySQL, Redis 放在 VPC 內,
會讓 local 開發變得很困難,還要自己裝這些 service,
不然就是要在裡面開機器開發。
不熟 Vim 的話就有頗痛苦!
所以可以透過下面這招,用 ssh tunnel 來做 port forwarding
|
|
這就可以把 Redis default 的 6379 port 轉進來囉!
上週公司的 ES cluster 炸裂,才發現一個有趣的問題。
一度以為是 index 過多所以才掛 shard 緩慢,但我想錯了!
就是當 ES Cluster 在分 shard 的時候,要是 data node 的 disk space 不夠會無法繼續分,
造成 shard 掛不回去。
以下兩個參數是控制關鍵。
cluster.routing.allocation.disk.watermark.low
控制 disk space 的低標。預設 85%,要是超過 85%,則不會再把 shard 分到這個 node 上。
cluster.routing.allocation.disk.watermark.high
控制 disk space 的高標。預設 90%,要是超過 90%,es 會嘗試把 shard 掛到其他 node 上。
在設定 Python 開發環境的時候,為了避免各專案之間的 module 互相干擾,把系統的 pip 裝了一堆不同版本的 libs,會利用 virtualenv 來打造獨立的專案運行環境。
|
|
然後你就得到 virtualenv 了!
|
|
接下來我會習慣在每個 Python 專案內,把他的 pip-requirements.txt 寫好
比如說這樣
|
|
就可以透過下面的指令把專案用到的套件裝起來,
這樣就不會干擾到系統內的 pip 啦!
|
|