環境資訊中心綜合外電;姜唯 編譯;林大利 審校
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※別再煩惱如何寫文案,掌握八大原則!
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※超省錢租車方案
※教你寫出一流的銷售文案?
※網頁設計最專業,超強功能平台可客製化
摘錄自2020年11月5日香港01報導
香港觀鳥會為了更了解香港的鳥類分布,與義工及浸會大學協力作出為期3年(2016至2019)的研究。研究中發現開闊原野雀鳥的分布量大跌7成,調查中的281種鳥類,發現繁殖季中有29種鳥類分布範圍縮減,而冬季則有31種,當中佔大多數的為開闊原野鳥類。包括一年四季棲息在香港的喜鵲分布範圍收窄高達6成,而喜歡在農地棲息的理氏鷚及山斑鳩,前者約下跌6成,後者下跌超過8成。反映開闊原野的環境遭到破壞。
香港觀鳥會指出,鳥類分布的改變能說明環境指標實況,現時的開闊原野如農地、低地草坡、近郊荒地等大多未有受被劃在郊野公園,亦不受法律保護。棲息在開闊原野的鳥類眾多,惟政府過往未有好好關注這些地方。反而以往較為側重保護一些森林和濕地,希望政府日後能多關注及保護農地及近郊荒地。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※教你寫出一流的銷售文案?
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※回頭車貨運收費標準
※別再煩惱如何寫文案,掌握八大原則!
※超省錢租車方案
※產品缺大量曝光嗎?你需要的是一流包裝設計!
全稱:django-rest framework
接口:什麼是接口、restful接口規範(協議)
CBV(基於FBV的基礎上形成)、CBV生命周期源碼—-基於restful規範下的CBV接口
請求生命周期:請求組件、解析組件、響應組件
序列化組件(序列化、反序列化簡單來說就是對象轉為字符串、字符串轉為對象,目的是為傳輸數據(傳給別的語言或者存儲))
三大認證(重中之重):認證(用戶是否合法)、權限(管理員、普通用戶)、頻率(次數過多限制)
其他組件(過濾、篩選、排序、分頁、路由)
概念:聯繫兩個物質的媒介,完成信息的交互。在web程序中,聯繫前台頁面與後台數據庫的媒介。
web接口組成:
url:長得像返回數據的url鏈接。如api.baidu.map/search
(www.baidu.com不叫接口,叫url鏈接,訪問只能拿到主頁。api.baidu.map/search是接口,返回的是json數據)
請求參數:前台按照指定的key提供數據給後台。(必須是給定的,這樣後台才能以此提取數據再到數據庫查詢返回)
響應數據:後台與數據庫交互后,將數據反饋給前台。
因此,接口就是帶着請求參數訪問能夠得到響應數據的url鏈接。
接口 = url + 請求參數 + 響應數據
接口規範:不同後台語言,使用同樣的接口返回同樣的數據。
如何寫接口:要寫url和響應數據。如果將請求參數也加上,就是在寫接口文檔。
兩大部分:
(1)url
1)用api關鍵字標識接口url。方式1:api.baidu.com;方式2:www.baudu.com/api
2)接口數據安全性決定優先選用https協議。
3)如果一個接口有多版本存在,需要在url中標識體現。如下的v1和v2
api.baidu.com/v1/…. api.baidu.com/v2/….
4)操作中的數據稱為資源,在url中資源一般採用複數形式,一個接口可以概括對該資源的多種操作方式。(一個url對應一個類,類裏面可以有多個請求方法)
可以對操作隱藏,並且復用性更強(寫動作了,只能適用這一個動作,不寫其他動作都可以用)如api.baidu.com/books api.baidu.com/books/(pk)
5)請求方式有多種,用一個url處理如何讓保證不混亂——通過不同的請求方式標識不同操作資源的方式
/books get 獲取所有
/books post 增加一個(多個)
/books/(pk) delete 刪除一個
/books/(pk) put 整體更新一個 #改一個用戶
/books/(pk) patch 局部更新一個 #改一個用戶的密碼
6)資源往往涉及數據的各種操作方式:篩選、排序、限制
api.baidu.com/books/?search=寶馬&ordering=-price&limit=3
(2)響應數據
1)http請求的響應會有響應狀態碼,接口用來返回操作的資源數據,也有自己操作數據結果的資源狀態碼(status 0代表操作資源成功,1代表操作失敗,2代表操作成功,但沒匹配結果)
注:資源狀態碼和http狀態碼不一樣,為前後台的約定
2)資源狀態碼的文字提示。
status ok “賬號有誤或者密碼有誤”
3)資源本身
results
注:刪除資源成功不做任何數據返回(只返回空字符串,連狀態碼、狀態信息都不返回)
4)不能直接返回的資源(子資源、圖片、視頻等資源),返回該資源的url鏈接。
https://api.baidu.com/v1/books?limit=3 get|post|delete|put|patch { “status” : 0, “msg” : “ok”, “results”: [ { “title”: “三國”, “price”: 78, “img”: “https://.....” } ] }
(1)項目準備:
|
1.分發路由 在項目文件夾的urls複製一份到應用文件夾中。然後在項目文件夾的urls分發路由給app:導入include,然後url(r’^api/’, include(‘api.urls’))。再在app文件夾的urls.py中分發路由給CBV 2.視圖 在應用中分發路由前,先寫類視圖 from django.http import JsonResponse from django.views import View class Book(View): def get(self, request, *args, **kwargs): return JsonResponse('get ok', safe=False) def post(self, request, *args, **kwargs): return JsonResponse('get ok', safe=False) #safe默認為true,要返回字典。不是字典否則拋異常。
3.在應用urls下分發路由 from django.conf.urls import url from . import views #注意在應用中導入視圖都是. 從當前應用中導入 urlpatterns = [ url(r'^books/', views.Book.as_view()), ]
4.定義模型類 (1)models.py中定義類 from django.db import models class Book(models.Model): title = models.CharField(max_length=64) price = models.DecimalField(max_digits=5, decimal_places=2) #整數、小數位 class Meta: #嵌套類(給上級類添加功能或指定標準) db_table = 'book' #自定義數據庫表名 verbose_name = "book" #給模型起個可讀的名字,默認是複數 verbose_name_plural = verbose_name #取消上面的複數 def __str__(self): #显示的內容 return '<<%s>>' % self.title
(2)數據庫遷移 進入django的shell環境中:Tools—-> run manage.py task 在shell環境中生成遷移文件:makemigrations。然後遷移:migrate
5.生成admin (1)在amin.py中註冊並且導入模型 from django.contrib import admin port models admin.site.register(models.Book)
(2)創建用戶 在shell環境中:createsuper創建超級用戶,然後輸入用戶密碼(郵箱不用)
|
(2)CBV的請求生命周期
請求如何到CBV下的get和post
a.請求過來,項目文件中路由分發給應用api的路由
b.應用分發路由走as_view函數。
views.Book.as_view() 保存一系列數據(request、args、**kwargs等)給Book對象,然後都給dispatch進行路由分發。
dispatch乾的事:判斷請求方式是否支持,然後返回(通過getattr)支持的這些請求方法(get、post等,在視圖中自定義get、post的返回值)的結果。
c.通過dispatch就執行了CBV下請求方式的結果,返回結果
六大基礎接口:獲取一個、獲取所有、增加一個、刪除一個、整體更新一個、局部更新一個
十大接口:6大基礎、群增、群刪、整體群改、局部群改
|
1.在應用的urls.py下分發路由 url(r’^books/$’, views.Book.as_view()), #必須要加$,否則後面匹配不到 url(r’^books/(?P<pk>.*)/$’, views.Book.as_view()),有名分組 在視圖函數中通過kwargs.get(pk)取到匹配的值
2.在views.py里寫邏輯 class Book(View):
def get(self, request, *args, **kwargs): pk = kwargs.get(‘pk’) #獲取參數 if not pk: #群查接口 #操作數據庫 book_obj_list = models.Book.objects.all() #序列化過程 book_list = [] for obj in book_obj_list: #將查到的對象序列化 dic = {} dic[‘title’] = obj.title dic[‘price’] = obj.price book_list.append(dic) return JsonResponse({ ‘status’ : 0, “msg” : “ok”, “results”: book_list, }, json_dumps_params={‘ensure_ascii’:False}) else: #單查接口 book_dic = models.Book.objects.filter(pk=pk).values( ‘title’, ‘price’).first() if book_dic: return JsonResponse({ ‘status’: 0, “msg”: “ok”, “results”: book_dic, }, json_dumps_params={‘ensure_ascii’: False})
return JsonResponse({ ‘status’: 2, “msg”: “no results”, }, json_dumps_params={‘ensure_ascii’: False})
def post(self, request, *args, **kwargs): #前台通過urlencoded方式提交數據 try: book_obj = models.Book.objects.create(**request.POST.dict()) #create創建對象。將request.POST中存放的提交的關鍵詞參數轉化為字典以**方式傳進去。沒傳參數,這邊會報錯。 if book_obj: return JsonResponse({ ‘status’: 0, “msg”: “ok”, “results”: {‘title’:book_obj.title, “price”:book_obj.price} }, json_dumps_params={‘ensure_ascii’: False}) except: #健壯性 return JsonResponse({ ‘status’: 1, “msg”: “wrong params”, }, json_dumps_params={‘ensure_ascii’: False}) return JsonResponse({ #可能操作數據庫失敗了 ‘status’: 2, “msg”: “created failed”, }, json_dumps_params={‘ensure_ascii’: False})
|
JsonResponse返回時,中文會變成unicode,要加json_dumps_params={‘ensure_ascii’:False}選項。但在linux環境下的火狐瀏覽器,加了是亂碼。
filter返回queryset對象,對象里是個列表(表名:對象信息(有自定義str就是自定義的信息))。first取里第一個對象(相當於print(第一個對象))values展示對應的對象里的值
<QuerySet [<Book: <<三國演義>>>]> #直接.filter
<<三國演義>> #.first()
<QuerySet [{‘title’: ‘三國演義‘, ‘price’: Decimal(‘56.00’)}]> #.values(‘title’,’price’)
{‘title’: ‘三國演義‘, ‘price’: Decimal(‘56.00’)} #.values.first() 是個字典
上面序列化的工作很麻煩。drf就是為了方便序列化的。
postman可以完成不同方式的請求:get、post、put等
postman發送數據包有三種方式:form-data、urlencoded、json. 原生django對urlencoded數據提交兼容。
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※教你寫出一流的銷售文案?
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※回頭車貨運收費標準
※別再煩惱如何寫文案,掌握八大原則!
※超省錢租車方案
※產品缺大量曝光嗎?你需要的是一流包裝設計!
LCA (Least Common Ancestors) ,即最近公共祖先,是指這樣的一個問題:在一棵有根樹中,找出某兩個節點 u 和 v 最近的公共祖先。
LCA 可分為在線算法與離線算法
對於該問題,很容易想到的做法是從 u、v 分別回溯到根節點,然後這兩條路徑中的第一個交點即為 u、v 的最近公共祖先,在一棵平衡二叉樹中,該算法的時間複雜度可以達到 O(logn)O(logn) ,但是對於某些退化為鏈狀的樹來說,算法的時間複雜度最壞為 O(n)O(n) ,顯然無法滿足更高頻率的查詢。
本節將介紹幾種比較高效的算法來解決這一問題,常見的算法有三種:在線 DFS + ST 算法、倍增算法、離線 Tarjan 算法。
接下來我們來一一解釋這三種 /* 看似高深,其實也不簡單 */ 的算法。
首先看到 ST 你會想到什麼呢?(腦補許久都沒有想到它會是哪個單詞的縮寫)
看過前文 『數據結構』RMQ 問題 的話你便可以明白 ST算法 的思路啦~
So ,關於 LCA 的這種在線算法也是可以建立在 RMQ 問題的基礎上咯~
我們設 LCA(T,u,v) 為在有根樹 T 中節點 u、v 的最近公共祖先, RMQ(A,i,j) 為線性序列 A 中區間 [i,j] 上的最小(大)值。
如下圖這棵有根樹:
我們令節點編號滿足父節點編號小於子節點編號(編號條件)
可以看出 LCA(T,4,5) = 2, LCA(T,2,8) = 1, LCA(T,3,9) = 3 。
設線性序列 A 為有根樹 T 的中序遍歷,即 A = [4,2,5,1,8,6,9,3,7] 。
由中序遍歷的性質我們可以知道,任意兩點 u、v 的最近公共祖先總在以該兩點所在位置為端點的區間內,且編號最小。
舉個栗子:
假設 u = 8, v = 7 ,則該兩點所確定的一段區間為 [8,6,9,3,7] ,而區間最小值為 3 ,也就是說,節點 3 為 u、v 的最近公共祖先。
解決區間最值問題我們可以採用 RMQ 問題中的 ST 算法 。
但是在有些問題中給出的節點並不一定滿足我們所說的父節點編號小於子節點編號,因此我們可以利用節點間的關係建圖,然後採用前序遍歷來為每一個節點重新編號以生成線性序列 A ,於是問題又被轉化為了區間最值的查詢,和之前一樣的做法咯~
時間複雜度: n×O(logn)n×O(logn) 預處理 + O(1)O(1) 查詢
想了解 RMQ 問題 的解法可以戳上面的鏈接哦~
以上部分介紹了 LCA 如何轉化為 RMQ 問題,而在實際中這兩種方案之間可以相互轉化
類比之前的做法,我們如何將一個線性序列轉化為滿足編號條件的有根樹呢?
讀者可以試着利用此方法將之前的線性序列 A = [4,2,5,1,8,6,9,3,7] 構造出有根樹 T ,結果一定滿足之前所說的編號條件,但卻不一定唯一。
Tarjan 算法是一種常見的用於解決 LCA 問題的離線算法,它結合了深度優先搜索與並查集,整個算法為線性處理時間。
首先來介紹一下 Tarjan 算法的基本思路:
偽代碼:
Tarjan(u) // merge 和 find 為並查集合併函數和查找函數
{
for each(u,v) // 遍歷 u 的所有子節點 v
{
Tarjan(v); // 繼續往下遍歷
merge(u,v); // 合併 v 到 u 這一集合
標記 v 已被訪問過;
}
for each(u,e) // 遍歷所有與 u 有查詢關係的 e
{
if (e 被訪問過)
u, e 的最近公共祖先為 find(e);
}
}
C++
感覺講到這裏已經沒有其它內容了,但是一定會有好多人沒有理解怎麼辦呢?
我們假設在如下樹中模擬 Tarjan 過程(節點數量少一點可以畫更少的圖o( ̄▽ ̄)o)
存在查詢: LCA(T,3,4)、LCA(T,4,6)、LCA(T,2,1) 。
注意:每個節點的顏色代表它當前屬於哪一個集合,橙色線條為搜索路徑,黑色線條為合併路徑。
當前所在位置為 u = 1 ,未遍歷孩子集合 v = {2,5} ,向下遍歷。
當前所在位置為 u = 2 ,未遍歷孩子集合 v = {3,4} ,向下遍歷。
當前所在位置為 u = 3 ,未遍歷孩子集合 v = {} ,遞歸到達最底層,遍歷所有相關查詢發現存在 LCA(T,3,4) ,但是節點 4 此時標記未訪問,因此什麼也不做,該層遞歸結束。
遞歸返回,當前所在位置 u = 2 ,合併節點 3 到 u 所在集合,標記 vis[3] = true ,此時未遍歷孩子集合 v = {4} ,向下遍歷。
當前所在位置 u = 4 ,未遍歷孩子集合 v = {} ,遍歷所有相關查詢發現存在 LCA(T,3,4) ,且 vis[3] = true ,此時得到該查詢的解為節點 3 所在集合的首領,即 LCA(T,3,4) = 2 ;又發現存在相關查詢 LCA(T,4,6) ,但是節點 6 此時標記未訪問,因此什麼也不做。該層遞歸結束。
遞歸返回,當前所在位置 u = 2 ,合併節點 4 到 u 所在集合,標記 vis[4] = true ,未遍歷孩子集合 v = {} ,遍歷相關查詢發現存在 LCA(T,2,1) ,但是節點 1 此時標記未訪問,因此什麼也不做,該層遞歸結束。
遞歸返回,當前所在位置 u = 1 ,合併節點 2 到 u 所在集合,標記 vis[2] = true ,未遍歷孩子集合 v = {5} ,繼續向下遍歷。
當前所在位置 u = 5 ,未遍歷孩子集合 v = {6} ,繼續向下遍歷。
當前所在位置 u = 6 ,未遍歷孩子集合 v = {} ,遍歷相關查詢發現存在 LCA(T,4,6) ,且 vis[4] = true ,因此得到該查詢的解為節點 4 所在集合的首領,即 LCA(T,4,6) = 1 ,該層遞歸結束。
遞歸返回,當前所在位置 u = 5 ,合併節點 6 到 u 所在集合,並標記 vis[6] = true ,未遍歷孩子集合 v = {} ,無相關查詢因此該層遞歸結束。
遞歸返回,當前所在位置 u = 1 ,合併節點 5 到 u 所在集合,並標記 vis[5] = true ,未遍歷孩子集合 v = {} ,遍歷相關查詢發現存在 LCA(T,2,1) ,此時該查詢的解便是節點 2 所在集合的首領,即 LCA(T,2,1) = 1 ,遞歸結束。
至此整個 Tarjan 算法便結束啦~
PS:不要在意最終根節點的顏色和其他節點顏色有一點點小小差距,可能是在染色的時候沒仔細看,總之就這樣咯~
PPS:所謂的首領就是、就是首領啦~
哇!還有一個倍增算法以後繼續補充吧!
對於不同的 LCA 問題我們可以選擇不同的算法。
假若一棵樹存在動態更新,此時離線算法就顯得有點力不從心了,但是在其他情況下,離線算法往往效率更高(雖然不能保證得到解的順序與輸入一致,不過我們有 sort 呀)
總之,喜歡哪種風格的 code 是我們自己的意願咯~
另外, LCA 和 RMQ 問題是兩個非常基礎的問題,很多複雜問題都可以轉化為這兩類問題來解決。(當然這兩類問題之間也可以相互轉化啦~)
OI wiki https://oi-wiki.org/graph/lca/
https://blog.csdn.net/my_sunshine26/article/details/72717112
https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/03.03.html
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※超省錢租車方案
※別再煩惱如何寫文案,掌握八大原則!
※回頭車貨運收費標準
※教你寫出一流的銷售文案?
※FB行銷專家,教你從零開始的技巧
轉載自2018年11月12日國際化學品政策宣導網
自台灣新南向政策上路以來,對於東協的投資持續增加,根據經濟部國貿局近5年(至2016年)的資料顯示,我國對新加坡的投資占比最高(47%),其次為越南(32%)。
根據2017年的財政部統計資料,東協為台灣化學品及塑膠與橡膠相關製品世界出口第二大市場,而化學品管理為國際各產業貿易中須關注的重要的法規,今年10月22日經濟部工業局主辦之「東協化學品管理因應策略宣導會」,特別邀請到新加坡化學工業產業協會(Singapore Chemical Industry Council Limited,SCIC)兩位資深業界講師,針對新加坡及東協國家化學品管理法規的進展及化學品全球調和制度(GHS)之管理機制進行說明。
講師分享新加坡化學管理框架,主要由各主管機關分別對管轄範圍內危險化學品進行管理,包含化學品生命週期的不同階段,針對產品初期發展、製造、運輸、儲存、販賣、使用、以及最後廢棄的生命週期進行管理。
例如進口時,儲存和運輸皆須進行申報及許可申請,且連結海關的進口資料作必要的管控和追蹤。而針對危害性化學品,新加坡民防部隊即要求在進口、儲存、運輸以及建造用途時申請執照。而新加坡國家環境局(National Environment Agency)也要求購買危害性化學品時須申請許可,並進行正確的標示。
另外為符合水俣公约的要求,新加坡在2020年起也將禁止特定含水銀產品的製造、輸入及出口,例如電池、化妝品、節能燈泡和某些醫療設備等。
新加坡GHS制度落實與業界合作 在GHS制度落實方面,講師除了說明新加坡對於GHS標示的要求,也提到當廠場現場中完整的GHS標示在實務上不可行時,應將標示資訊簡化,降低過多複雜的資訊展示,但此規定並不適用需要運送到其他廠場時的標示。
另外在出口方面,進口後再重新出口、以及儲存將出口的國內製造之危害性化學品時,都依相關規定進行標示,並符合出口目的國家之法規要求。其中更令人驚豔的是講師分享之業界與新加坡政府於法規制訂時之技術合作,彼此透過密集的諮詢與業界經驗分享,取得法規與經濟發展之平衡之作法,亦是台灣可積極參考之作法。
講師也針對其他東協國家化學品管理規範最新進度進行介紹,摘要如下:泰國正在建立第一份既有化學物質清單,預計會於2020年公布; 越南於2017年11月已正式實施化學法法令,透過清單進行工業及前驅化學品的管理規範,目前也正在建立化學物質清單; 柬埔寨、寮國、緬甸目前仍著重於GHS的執行; 菲律賓則持續檢視預製造及預進口的新化學物質通報規範,以及其他管制清單; 馬來西亞與印尼目前持續評估及調整其化學品管理框架。
東協國家是我國進來貿易往來的重要區域,經濟部工業局提醒我國廠商應隨時掌握東協各國化學品管理法規的近況,採取因應法規需要的措施與行動,並及早準備未來法規發展所需的合規相關資料,確保出口貿易活動能符合當地的相關規範。
※ 轉載自
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
※超省錢租車方案
摘錄自2018年9月6日BBC中文網報導
日本首次公開證實,2011年福島核電站洩漏事故當中的一名工人,在事後因為核輻射而死亡。
該名50多歲的男子在2016年被診斷患有肺癌,他最終也是死於這種疾病。
日本政府此前曾經承認,福島核輻射導致四名工人患病,但這是日本第一次承認有人因此而死亡。
在聽取放射科專家及其他專業人士的意見之後,厚生勞動省認為該名工人的家屬應當獲得賠償。
雖然福島核災當時並沒有人直接死於核事故,但負責福島核設施運作的東京電力株式會社仍然面對多起賠償申訴。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※Google地圖已可更新顯示潭子電動車充電站設置地點!!
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※別再煩惱如何寫文案,掌握八大原則!
※網頁設計最專業,超強功能平台可客製化