Django rest framwork-CMDB API实战
一、序列化
from rest_framework import serializers
from web_manage import models
class AssetSerializer(serializers.ModelSerializer):
class Meta:
model = models.Server
fields = '__all__'
depth = 3

from web_api.serializers import AssetSerializer
from web_manage import models
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET','POST'])
def AssetViewSet(request):
if request.method == 'GET':
salt_name = request.GET.get('salt_name')
queryset = models.Server.objects.all() if salt_name == 'None' else models.Server.objects.filter(salt_name=salt_name)
serializer_class = AssetSerializer(queryset,many=True) #many=True返回具体内容
return Response(serializer_class.data)

三、注册URL

四、测试

四-2、因NIC,MEM,DISK这3个表是反向关联Server表,所以默认是没有反查询,需手动定义
from rest_framework import serializers
from web_manage import models
class MemorySerializer(serializers.ModelSerializer):
class Meta:
model = models.Memory
fields = '__all__'
class NicSerializer(serializers.ModelSerializer):
class Meta:
model = models.NIC
fields = '__all__'
class DiskSerializer(serializers.ModelSerializer):
class Meta:
model = models.Disk
fields = '__all__'
class AssetSerializer(serializers.ModelSerializer):
memory_set = MemorySerializer(many=True)
nic_set = NicSerializer(many=True)
disk_set = DiskSerializer(many=True)
class Meta:
model = models.Server
fields = '__all__'
depth = 3


五、客户端验证tocken后,才能获取API信息
客户端:
#!/usr/bin/python
#encoding:utf-8
import hashlib,time
import urllib,urllib2,json
def get_token(username,token_id):
timestamp = int(time.time())
md5_format_str = "%s\n%s\n%s" %(username,timestamp,token_id)
obj = hashlib.md5()
obj.update(md5_format_str)
return obj.hexdigest()[10:17], timestamp
def __attach_token(url_str):
'''把用户名和密码加密后拼接到POST的URL中'''
user = 'reporter'
token_id = '349095cc-1330-11e5-b06a-a45ef3bec39f'
md5_token,timestamp = get_token(user,token_id)
url_arg_str = "user=%s×tamp=%s&token=%s" %(user,timestamp,md5_token)
if "?" in url_str:
new_url = url_str + "&" + url_arg_str
else:
new_url = url_str + "?" + url_arg_str
return new_url
if __name__ == '__main__':
url = 'http://127.0.0.1:8000/api/get_assets_count/'
url = __attach_token(url)
data = {"idc":"aws_cn"}
data_encode = urllib.urlencode(data)
req = urllib2.Request(url=url,data=data_encode)
res_data = urllib2.urlopen(req,timeout=30)
callback = res_data.read()
callback = json.loads(callback)
print callback
服务端:
@api_auth
@api_view(['GET','POST'])
def AssetViewSet_count(request):
if request.method == 'POST':
idc = request.POST.get('idc')
idc_info = {'aws_global':[8,10],'aws_cn':[5],'aliyun_global':[11],'aliyun_cn':[6]}
idc_id = idc_info.get(idc)
if idc_id:
queryset = models.Asset.objects.filter(device_status_id=1,idc__id__in=idc_id).count()
else:
queryset = 'Error'
return Response(queryset)
else:
return Response('Just POST')
验证,执行客户端脚本:

Django rest framwork-CMDB API实战的更多相关文章
- Python Django CMDB项目实战之-3创建form表单,并在前端页面上展示
基于之前的项目代码 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页.index页.文章页面 Python Django CMDB项目实战之-2创建APP. ...
- Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据
基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...
- Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面
1.环境 win10 python 2.7.14 django 1.8.2 需要用到的依赖包:MySQLdb(数据库的接口包).PIL/pillow(处理图片的包) 安装命令: pip install ...
- Django rest framwork
Restful API REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类 ...
- CMDB API验证
CMDB API验证 为什么做API验证 API验证是防止数据在传输的过程中,保证数据不被篡改 如何设计的API验证 灵感来源于Torando中加密Cookie的源码,主要是生成加密的随机字符串. M ...
- 百度AI开放平台- API实战调用
百度AI开放平台- API实战调用 一. 前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...
- Django缓存机制--rest_framework中节流源码使用的就是django提供的缓存api
一.配置缓存 https://www.jb51.net/article/124434.htm 二.缓存全站.页面.局部 三.自我控制的简单缓存API API 接口为:django.core.c ...
- django表单的api
django表单的api,参考文档:https://yiyibooks.cn/xx/Django_1.11.6/ref/forms/api.html 绑定与未绑定形式: Form要么是绑定的,要么是未 ...
- python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上
经历了两天的时候终于把本地使用python3 django开发的接口API部署到服务器上了,还是记录一下,以免之后忘记,哈哈 注意一点,就是,centos7是基于python2的,我这边默认的是pyt ...
- 详解Django rest_framework实现RESTful API
这篇文章主要介绍了详解Django rest_framework实现RESTful API,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 一.什么是REST 面向资源是R ...
随机推荐
- curl 实例详解
使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据 了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并 ...
- 微信小程序 功能函数 将对象的键添加到数组 (函数深入)
// 将对象的键添加到数组 var arr = Object.keys(site); //英文 https://developer.mozilla.org/en-US/docs/Web/JavaScr ...
- P2261 [CQOI2007]余数求和
我是题面 题意还是很清晰,很容易理解 1e9范围明显不能暴力,除非你能把常数优化到\(\frac1 {10}\),但我实在想象不到用了这么多取模怎么把常数优化下去 我们可以把\(k\%i\)变成\(k ...
- 【NOIP&NOI】飞扬的小鸟 Flappy Bird
描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告 ...
- BZOJ 2521: [Shoi2010]最小生成树
2521: [Shoi2010]最小生成树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 445 Solved: 262[Submit][Statu ...
- 51nod 1208 窗上的星星 | 线段树 扫描线
51nod 1208 Stars In Your Window 题面 整点上有N颗星星,每颗星星有一个亮度.用一个平行于x轴和y轴,宽为W高为H的方框去套星星.套住的所有星星的亮度之和为S(包括边框上 ...
- CentOS7单节点部署redis-cluster
准备一台机器,系统版本为CentOS7.(注意本文描述的是redis-cluster,不是主从复制) 1.下载软件包 # wget http://download.redis.io/releases/ ...
- STS导入Gradle项目出现 Could not create task of type 'DependencyManagementReportTask'
解决方法: 在build.gradle文件下添加如下: classpath 'io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE'
- 解题:NOI 2009 管道取珠
题面 考虑这个平方的实际意义,实际是说取两次取出一样的序列 那么设$dp[i][j][k][h]$表示第一次在上面取$i$个下面取$j$个,第二次在上面取$k$个下面取$h$个的方案数 等等$n^4$ ...
- webservice的接口协议(HTTPClient 、RestTemplate HttpURLConnection)
HTTP协议时Internet上使用的很多也很重要的一个协议,越来越多的java应用程序需要通过HTTP协议来访问网络资源. HTTPClient提供的主要功能: 1.实现了所有HTTP的方法(GET ...