zoukankan      html  css  js  c++  java
  • Django rest framwork-CMDB API实战

    一、序列化

    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
    %s
    %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')
    

    验证,执行客户端脚本:  

      

  • 相关阅读:
    orapwd创建密码文件
    ORA-00119: invalid specification for system parameter LOCAL_LISTENER
    创建和使用虚拟专用目录
    创建和使用RMAN存储脚本
    oracle归档日志管理
    Flash Recovery Area 的备份
    Flash Recovery Area空间不足导致DB不能打开或hang住处理方法
    Flash Recovery Area
    计算机组成原理实验之微程序控制器实验
    面向对象程序设计(OOP设计模式)-行为型模式之观察者模式的应用与实现
  • 原文地址:https://www.cnblogs.com/yangmv/p/8493105.html
Copyright © 2011-2022 走看看