最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django如何開發(fā)簡(jiǎn)單的查詢接口詳解

 更新時(shí)間:2019年05月17日 08:50:37   作者:628 財(cái)經(jīng)  
這篇文章主要給大家介紹了使用Django如何開發(fā)簡(jiǎn)單的查詢接口的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Django處理json也是一把好手,有時(shí)候在工作中各個(gè)部門都會(huì)提供自己的相關(guān)接口,但是信息也只是單方的信息,這時(shí)候需要運(yùn)維將各個(gè)部門的信息進(jìn)行集成,統(tǒng)一出一個(gè)查詢接口或頁面,方便其他部門同事使用,接下來就介紹一下Django如果操作json。

首先介紹一下通過url獲取json的方法:

import urllib2

我們的需求是做一個(gè)集成的信息查詢系統(tǒng),包括簡(jiǎn)單的IP信息查詢(省份運(yùn)營(yíng)商等),以及設(shè)備信息(如果是登記在資產(chǎn)管理庫中的),還有IP歸屬(是否是客戶源站IP),以及是否為其他部門的存儲(chǔ)IP,另外還有錯(cuò)誤日志具體信息查詢,等等功能,這些功能信息的提供分屬于不同的部門,有的是給的url,有的是給的文件,如何將這些功能都揉在一起變成一個(gè)接口,確實(shí)比較考驗(yàn)邏輯思維,接下來通過代碼來具體介紹:

首先我們要分清楚要查詢的信息都有什么特征,如果信息非常類似就需要用不同的參數(shù)來區(qū)分了,如果信息差異明顯可以簡(jiǎn)單通過邏輯順序判斷。

我們先從查詢主機(jī)名開始寫,因?yàn)橹鳈C(jī)名只在資產(chǎn)系統(tǒng)中有登記,是相對(duì)固定的數(shù)據(jù):

url = "http://3.3.3.3/api/v1/demo..." #先定義了幾個(gè)url的查詢接口,配合我們后面查詢來用,當(dāng)然這些接口吐出的數(shù)據(jù)得是json格式。 
urlks3 = "http://2.2.2.2/api/v1/demo..."
...
 
 types = ['hostname','pubip','otherinfo','isp','province','city'] # 先定義我們這個(gè)接口能吐哪些東西
 if host: # 判斷查詢的是否為主機(jī)名
  hostcheck = str(Ipinfo.objects.values('hostname','pubip','otherinfo').filter(hostname=host)) # 在數(shù)據(jù)庫中查詢結(jié)果
  if hostcheck: 
   hostcheck = re.sub(r'\'', '\"', hostcheck) # 修查詢出的數(shù)據(jù)改格式為json格式
   maininfo = json.loads(hostcheck) # 將數(shù)據(jù)庫查詢出的數(shù)據(jù)導(dǎo)出到對(duì)象
   pubip = maininfo['pubip'] # 這時(shí)就可以取出json對(duì)應(yīng)的內(nèi)容了
   checkipurl = ...+pubip
   data=urllib2.urlopen(checkipurl).read() # 讀取某個(gè)url中的json內(nèi)容
   ipinfo = json.loads(data) # 將上一步獲取的數(shù)據(jù)導(dǎo)出到對(duì)象
   # 下面是各種賦值,就很隨意了
   maininfo['isp'] = ipinfo['info']['isp'] 
   maininfo['province'] = ipinfo['info']['province']
   maininfo['city'] = ipinfo['info']['city']
   # 接下來判斷這個(gè)請(qǐng)求是否查詢了錯(cuò)誤日志信息,這個(gè)是因?yàn)橹鳈C(jī)名跟錯(cuò)誤信息內(nèi)容比較接近,只能靠參數(shù)來判斷了  
   if erres:
    erres = re.sub(r' ', '%20', erres)
    checkerreurl = ...
    errepage = urllib2.urlopen(checkerreurl)
    erredata = errepage.read()
    print erredata
    erreinfo = json.loads(erredata)
    maininfo['ch_exp']= erreinfo['ch_exp']
  # 下面是如果查詢不到主機(jī)信息,就補(bǔ)充空信息避免程序出現(xiàn)異常
  else:
   for item in types:
    maininfo[item] = '-'
  return JsonResponse(maininfo,json_dumps_params={'ensure_ascii':False})

接下來我們查詢IP信息:

 if ipadd:
  hostcheck = str(Ipinfo.objects.values('hostname','pubip','otherinfo').filter(Q(pubip=ipadd)...)[0:1]) #多個(gè)字段查詢可以用Q方法 
  if hostcheck:
   hostcheck = re.sub(r'\'', '\"', hostcheck)
   maininfo = json.loads(hostcheck)
   pubip = maininfo['pubip']
   checkipurl = ...+ipadd
   page=urllib2.urlopen(checkipurl)
   data=page.read()
   ipinfo = json.loads(data)
   maininfo['isp'] = ipinfo['info']['isp']
   maininfo['province'] = ipinfo['info']['province']
   maininfo['city'] = ipinfo['info']['city']

期間還有其他的聯(lián)合查詢,邏輯組合可以自行安排。

接下來介紹一下讀取json文件并提供查詢的方法:

我們的需求是判斷IP是否屬于客戶源站,其中跟客戶交互的兩個(gè)部門都定期導(dǎo)出了客戶源站信息文件,但僅僅是文件,而且這兩個(gè)文件的格式還不太一樣

我們要根據(jù)這兩個(gè)文件來查詢IP是否屬于客戶源站:

# 打開文件句柄,這部分一定要寫到函數(shù)以外,如果文件很小并且要支持實(shí)時(shí)更新,可以寫到函數(shù)內(nèi)
with open('/.../source.json','r') as file_object: # 這個(gè)文件是es直接導(dǎo)出的一個(gè)大的json,每個(gè)k、v都一一對(duì)應(yīng)
 srcinfo = file_object.read()
 srcjson = json.loads(srcinfo)
with open('/.../total.json','r') as tot_object: # 這個(gè)文件是一個(gè)列表式的json,元素較多,元素中是鍵值對(duì)。
 totinfo = tot_object.read()
 totjson = json.loads(totinfo)

接下來定義函數(shù):

def chsrcip(request):
 exit_flag = [] # 給循環(huán)打個(gè)退出標(biāo)簽 等下有用
 ip = request.GET.get('ip')
 maininfo = {}
 maininfo['hostname']= '-' # 先給個(gè)默認(rèn)值
 maininfo['otherinfo']= '-'
 if re.search('^(\d+\.\d+\.\d+.\d+)$',ip):
  for item in srcjson:
   for k,v in item.items():
    if ip in v:
     maininfo['hostname']=k
     maininfo['otherinfo']= u'客戶源站' 
     exit_flag = 'true' # 由于IP數(shù)量龐大,所以找到第一個(gè)IP時(shí)就停止循環(huán)并退出整個(gè)for循環(huán),這時(shí)候就用到了退出標(biāo)簽。
     break
   if exit_flag: 
    break
  for item in totjson: # 進(jìn)入第二個(gè)for循環(huán)查詢查詢具體的客戶名稱
   if ip in item['originAddresses']:
    maininfo['hostname']= item['domain'],item['userId']
    maininfo['otherinfo']= u'客戶源站'
    break
  return JsonResponse(maininfo,json_dumps_params={'ensure_ascii':False})

以上的調(diào)用方法根據(jù)數(shù)據(jù)名稱不同可自行修改。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Python 中包/模塊的 `import` 操作代碼

    Python 中包/模塊的 `import` 操作代碼

    這篇文章主要介紹了Python 中包/模塊的 `import` 操作代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-04-04
  • 使用Python計(jì)算偏導(dǎo)數(shù)

    使用Python計(jì)算偏導(dǎo)數(shù)

    偏導(dǎo)數(shù)在數(shù)學(xué)、物理、工程等領(lǐng)域中都有廣泛的應(yīng)用,特別是在描述多變量系統(tǒng)的變化率、梯度、最小值和最大值等方面,下面我們就來看看如何利用Python計(jì)算偏導(dǎo)數(shù)吧
    2024-01-01
  • 詳解pyppeteer(python版puppeteer)基本使用

    詳解pyppeteer(python版puppeteer)基本使用

    這篇文章主要介紹了詳解pyppeteer(python版puppeteer)基本使用 ,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python數(shù)據(jù)預(yù)處理之將類別數(shù)據(jù)轉(zhuǎn)換為數(shù)值的方法

    python數(shù)據(jù)預(yù)處理之將類別數(shù)據(jù)轉(zhuǎn)換為數(shù)值的方法

    下面小編就為大家?guī)硪黄猵ython數(shù)據(jù)預(yù)處理之將類別數(shù)據(jù)轉(zhuǎn)換為數(shù)值的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Python2.7 實(shí)現(xiàn)引入自己寫的類方法

    Python2.7 實(shí)現(xiàn)引入自己寫的類方法

    下面小編就為大家分享一篇Python2.7 實(shí)現(xiàn)引入自己寫的類方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • pandas數(shù)據(jù)篩選和csv操作的實(shí)現(xiàn)方法

    pandas數(shù)據(jù)篩選和csv操作的實(shí)現(xiàn)方法

    這篇文章主要介紹了pandas數(shù)據(jù)篩選和csv操作的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • django 修改server端口號(hào)的方法

    django 修改server端口號(hào)的方法

    今天小編就為大家分享一篇django 修改server端口號(hào)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • PyQt5 設(shè)置窗口全屏顯示方式

    PyQt5 設(shè)置窗口全屏顯示方式

    這篇文章主要介紹了PyQt5 設(shè)置窗口全屏顯示方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python運(yùn)行時(shí)間的幾種方法

    python運(yùn)行時(shí)間的幾種方法

    這篇文章主要為大家詳細(xì)介紹了python運(yùn)行時(shí)間的幾種方法,分析每一種運(yùn)行時(shí)間方法的利弊,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Python 通過微信控制實(shí)現(xiàn)app定位發(fā)送到個(gè)人服務(wù)器再轉(zhuǎn)發(fā)微信服務(wù)器接收位置信息

    Python 通過微信控制實(shí)現(xiàn)app定位發(fā)送到個(gè)人服務(wù)器再轉(zhuǎn)發(fā)微信服務(wù)器接收位置信息

    這篇文章主要介紹了Python 通過微信控制實(shí)現(xiàn)app定位發(fā)送到個(gè)人服務(wù)器,再轉(zhuǎn)發(fā)微信服務(wù)器接收位置信息,本文給出了實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論

新源县| 宾阳县| 响水县| 邹平县| 青岛市| 普兰店市| 三河市| 荔浦县| 滦南县| 楚雄市| 潮安县| 舟山市| 广平县| 长垣县| 牡丹江市| 淅川县| 锦屏县| 齐齐哈尔市| 扶沟县| 理塘县| 称多县| 冀州市| 邹城市| 定西市| 沛县| 永寿县| 右玉县| 漠河县| 屏东市| 金坛市| 新民市| 元江| 太原市| 伊春市| 襄汾县| 罗城| 曲麻莱县| 叶城县| 仁寿县| 兴宁市| 嘉兴市|