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 ...
随机推荐
- isset与empty 的区别
isset()与empty()函数的区别,isset()只需要验证一个值是否存在: 而empty()不但需验证这个值是否存在,还需检验它的值是否非空和非0: 注:isset()只检验一个变量是否已经设 ...
- GCC 提供的原子操作
gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作. 其声明如下: type __sync_fetch_and_add (type *ptr, typ ...
- MachineLearning Exercise 4 :Neural Networks Learning
nnCostFunction 消耗公式: a1 = [ones(m,) X]; z2 = a1*Theta1'; pre = sigmoid(a1*Theta1'); a2 = [ones(m,) p ...
- P1155 双栈排序
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作aaa 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果 ...
- hao123劫持主页
转自:https://www.zhihu.com/question/39881858 第一步 Firefox.打开Firefox,按Alt+H弹出帮助菜单,点“故障排除信息” 第二步 点“配置文件夹” ...
- 读取Maven项目下resources目录下的配置文件(properties为例)
配置文件:xxxxx.properties a.url=******************** b.url=---------------------------------- 读取配置文件: im ...
- 【NOI2016】区间
目链接:http://uoj.ac/problem/222 在数轴上有 n 个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m 个区间共同包含至少 ...
- 【bzoj2780】 Sevenk Love Oimaster
http://www.lydsy.com/JudgeOnline/problem.php?id=2780 (题目链接) 题意 给出很多主串和很多询问串,求一个询问串在多少主串中出现过 Solution ...
- 【bzoj4520】 Cqoi2016—K远点对
http://www.lydsy.com/JudgeOnline/problem.php?id=4520 (题目链接) 题意 求平面内第K远点对的距离. Solution 左转题解:jump 细节 刚 ...
- bzoj 4358: permu 莫队
第一步先莫队分块. 对于每一块l~r,初始右端点设为r+1,然后每个询问先将右端点往右移,然后处理询问在l~r之间的部分,最后用一个栈再把l~r的复原. 具体来说是维护两个数组now1和now2,一个 ...