django框架详解(Django如何开发简单的查询接口详解)
类别:脚本大全 浏览量:205
时间:2021-10-02 01:29:33 django框架详解
Django如何开发简单的查询接口详解前言
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}) |
以上的调用方法根据数据名称不同可自行修改。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。
原文链接:http://www.000628.com/node/195
您可能感兴趣
- 阿里云网站cdn加速(阿里云CDN刷新链接接口实践)
- nginx配置访问接口(nginx网站服务如何配置防盗链推荐)
- thinkphp3.2.3 接口开发(ThinkPHP3.2.3框架Memcache缓存使用方法实例总结)
- python 接口测试怎么校验json数据(python接口自动化十七--Json 数据处理---一次爬坑记详解)
- django框架详解(Django如何开发简单的查询接口详解)
- html5的canvas代码(H5最强接口之canvas实现动态图形功能)
- python接口管理系统(基于Python实现用户管理系统)
- axios调用接口(如何实现axios的自定义适配器adapter)
- laravel开发登录接口(解决laravel5中auth用户登录其他页面获取不到登录信息的问题)
- python接口自动化接口依赖(python接口自动化十六--参数关联接口后传详解)
- h5支付接口第四方支付(h5移动端调用支付宝、微信支付的实现)
- dedecms更新后支付宝接口提示错误ILLEGAL_EXTERFACE的解决方法(dedecms更新后支付宝接口提示错误ILLEGAL_EXTERFACE的解决方法)
- django整合前端流程日志权限(使用Django开发简单接口实现文章增删改查)
- python人脸识别库有几个(Python人脸识别第三方库face_recognition接口说明文档)
- laravel 后台任务配置(在Laravel中使用GuzzleHttp调用第三方服务的API接口代码)
- thinkphp5开发教程(thinkPHP5框架接口写法简单示例)
- 春节放假几天(春节放假几天2023法定几天)
- 今天 3月13日,31年前,一个英雄少年感动了中国(今天3月13日31年前)
- 你好,新成理人丨成都理工大学2019级新生开学典礼隆重举行(新成理人丨成都理工大学2019级新生开学典礼隆重举行)
- 这部民警编演的红色话剧,讲述了一个不断追寻的故事(这部民警编演的红色话剧)
- 日本菜有什么好吃(日本菜有什么好吃的做法)
- 韩国泡菜做法(韩国泡菜的做法步骤)
热门推荐
- dedecms点赞功能怎么做呢(dedecms自定义表单添加发布时间功能的方法)
- jquery unbind
- mysqlinnodb锁使用教程(MySQL Innodb关键特性之插入缓冲insert buffer)
- laravel权限控制(laravel-admin 在列表页添加自定义按钮的例子)
- mysql limit越大越慢(MySQL limit分页大偏移量慢的原因及优化方案)
- win7redis安装教程(Docke中安装redis的方法)
- 微信小程序接口返回数据怎么弄(微信小程序页面返回传值的4种解决方案汇总)
- thinkphp框架实例(ThinkPHP框架整合微信支付之JSAPI模式图文详解)
- ci框架怎样修改为https协议(CI框架教程之优化验证码机制详解验证码辅助函数)
- JavaScript中call、apply、bind实现原理详解(JavaScript中call、apply、bind实现原理详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9