前言
Django处理json也是一把好手,有时候在工作中各个部门都会提供自己的相关接口,但是信息也只是单方的信息,这时候需要运维将各个部门的信息进行集成,统一出一个查询接口或页面,方便其他部门同事使用,接下来就介绍一下Django如果操作json。
首先介绍一下通过url获取json的方法:
import urllib2
我们的需求是做一个集成的信息查询系统,包括简单的IP信息查询(省份运营商等),以及设备信息(如果是登记在资产管理库中的),还有IP归属(是否是客户源站IP),以及是否为其他部门的存储IP,另外还有错误日志具体信息查询,等等功能,这些功能信息的提供分属于不同的部门,有的是给的url,有的是给的文件,如何将这些功能都揉在一起变成一个接口,确实比较考验逻辑思维,接下来通过代码来具体介绍:
首先我们要分清楚要查询的信息都有什么特征,如果信息非常类似就需要用不同的参数来区分了,如果信息差异明显可以简单通过逻辑顺序判断。
我们先从查询主机名开始写,因为主机名只在资产系统中有登记,是相对固定的数据:
url = "http://3.3.3.3/api/v1/demo..." #先定义了几个url的查询接口,配合我们后面查询来用,当然这些接口吐出的数据得是json格式。 urlks3 = "http://2.2.2.2/api/v1/demo..." ... types = ['hostname','pubip','otherinfo','isp','province','city'] # 先定义我们这个接口能吐哪些东西 if host: # 判断查询的是否为主机名 hostcheck = str(Ipinfo.objects.values('hostname','pubip','otherinfo').filter(hostname=host)) # 在数据库中查询结果 if hostcheck: hostcheck = re.sub(r'\'', '\"', hostcheck) # 修查询出的数据改格式为json格式 maininfo = json.loads(hostcheck) # 将数据库查询出的数据导出到对象 pubip = maininfo['pubip'] # 这时就可以取出json对应的内容了 checkipurl = ...+pubip data=urllib2.urlopen(checkipurl).read() # 读取某个url中的json内容 ipinfo = json.loads(data) # 将上一步获取的数据导出到对象 # 下面是各种赋值,就很随意了 maininfo['isp'] = ipinfo['info']['isp'] maininfo['province'] = ipinfo['info']['province'] maininfo['city'] = ipinfo['info']['city'] # 接下来判断这个请求是否查询了错误日志信息,这个是因为主机名跟错误信息内容比较接近,只能靠参数来判断了 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'] # 下面是如果查询不到主机信息,就补充空信息避免程序出现异常 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]) #多个字段查询可以用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']
期间还有其他的联合查询,逻辑组合可以自行安排。
接下来介绍一下读取json文件并提供查询的方法:
我们的需求是判断IP是否属于客户源站,其中跟客户交互的两个部门都定期导出了客户源站信息文件,但仅仅是文件,而且这两个文件的格式还不太一样
我们要根据这两个文件来查询IP是否属于客户源站:
# 打开文件句柄,这部分一定要写到函数以外,如果文件很小并且要支持实时更新,可以写到函数内 with open('/.../source.json','r') as file_object: # 这个文件是es直接导出的一个大的json,每个k、v都一一对应 srcinfo = file_object.read() srcjson = json.loads(srcinfo) with open('/.../total.json','r') as tot_object: # 这个文件是一个列表式的json,元素较多,元素中是键值对。 totinfo = tot_object.read() totjson = json.loads(totinfo)
接下来定义函数:
def chsrcip(request): exit_flag = [] # 给循环打个退出标签 等下有用 ip = request.GET.get('ip') maininfo = {} maininfo['hostname']= '-' # 先给个默认值 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数量庞大,所以找到第一个IP时就停止循环并退出整个for循环,这时候就用到了退出标签。 break if exit_flag: break for item in totjson: # 进入第二个for循环查询查询具体的客户名称 if ip in item['originAddresses']: maininfo['hostname']= item['domain'],item['userId'] maininfo['otherinfo']= u'客户源站' break return JsonResponse(maininfo,json_dumps_params={'ensure_ascii':False})
以上的调用方法根据数据名称不同可自行修改。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]