一、序列化

serializers.py
from rest_framework import serializers
from web_manage import models
class AssetSerializer(serializers.ModelSerializer):
class Meta:
model = models.Server
fields = '__all__'
depth = 3
 
二、展示层
rest_views.py
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 

四、测试

原生json样式只需要加上 format参数即可

四-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实战的更多相关文章

  1. Python Django CMDB项目实战之-3创建form表单,并在前端页面上展示

    基于之前的项目代码 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页.index页.文章页面 Python Django CMDB项目实战之-2创建APP. ...

  2. Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据

    基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...

  3. Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面

    1.环境 win10 python 2.7.14 django 1.8.2 需要用到的依赖包:MySQLdb(数据库的接口包).PIL/pillow(处理图片的包) 安装命令: pip install ...

  4. Django rest framwork

    Restful API REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类 ...

  5. CMDB API验证

    CMDB API验证 为什么做API验证 API验证是防止数据在传输的过程中,保证数据不被篡改 如何设计的API验证 灵感来源于Torando中加密Cookie的源码,主要是生成加密的随机字符串. M ...

  6. 百度AI开放平台- API实战调用

    百度AI开放平台- API实战调用 一.      前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...

  7. Django缓存机制--rest_framework中节流源码使用的就是django提供的缓存api

    一.配置缓存   https://www.jb51.net/article/124434.htm 二.缓存全站.页面.局部   三.自我控制的简单缓存API API 接口为:django.core.c ...

  8. django表单的api

    django表单的api,参考文档:https://yiyibooks.cn/xx/Django_1.11.6/ref/forms/api.html 绑定与未绑定形式: Form要么是绑定的,要么是未 ...

  9. python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上

    经历了两天的时候终于把本地使用python3 django开发的接口API部署到服务器上了,还是记录一下,以免之后忘记,哈哈 注意一点,就是,centos7是基于python2的,我这边默认的是pyt ...

  10. 详解Django rest_framework实现RESTful API

    这篇文章主要介绍了详解Django rest_framework实现RESTful API,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 一.什么是REST 面向资源是R ...

随机推荐

  1. MVC框架理解及优缺点

    MVC:模型(Model).视图(View).控制器(Control) 流程如下: 首先是视图向控制器发送请求,控制器再将业务请求发送给模型, 然后模型处理请求业务并把结果返回给控制器,控制器根据结果 ...

  2. dbgrid如何在最左边的列上显示行序号

    procedure TForm1.Table1CalcFields(DataSet: TDataSet); begin table1.FieldValues['no']:=table1.RecNo; ...

  3. 计算机网络【1】—— OSI七层协议和TCP/IP四层协议

    新开一贴,专门用来记录计算机网络相关知识. 一.OSI七层协议 物理层.数据链路层.网络层.传输层.会话层.表示层.应用层 二.TCP/IP四层协议 网络接口层.网际层.运输层.应用层 三.五层协议 ...

  4. ie8 ajaxSubmit 上传文件提示下载

    转载 解决ie下ajaxsubmit上传文件提示下载文件问题 主要是应为放回类型为json,返回text/html

  5. 【CSS】规范大纲

    文件规范: 文件分类 : 通用类 :业务类. 文件引入:行内样式(不推荐):外联引入:内联引入.(避免使用Import引入) 文件本身:文件名. 编码:UTF-8. 注释规范: 块状注释:统一缩进,在 ...

  6. YARN与MapReduce1的对比

    Apache YARN (Yet Another Resource Negotiator)从Hadoop2开始.YARN为集群提供资源管理和Applications的调度.YARN的API用于操作集群 ...

  7. 1.红黑树和自平衡二叉(查找)树区别 2.红黑树与B树的区别

    1.红黑树和自平衡二叉(查找)树区别 1.红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单. 2.平衡 ...

  8. python读取写入内存方法SringIO,BytesIO

    python中不仅仅可以在磁盘中写入文件,还允许直接在内存中直接写入数据:需要借助StringIO和BytesIO来实现: 1.直接操作StringIO from io import StringIO ...

  9. Timing wheel心跳机制

    在web服务中,断开空闲连接是一种减少资源浪费的一种手段,由此就有了心跳机制来判断一个连接是否空闲. 一种简单粗暴的方式: 1. 服务端每个连接保存一个最后一次操作的时间戳,每次这个连接对应fd可读时 ...

  10. 模板:快速傅里叶变换(FFT)

    参考:http://blog.csdn.net/f_zyj/article/details/76037583 如果公式炸了请去我的csdn博客:http://blog.csdn.net/luyouqi ...