我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python[7] :Python制作j

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python[7] :Python制作j

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。


继承前几篇文章,围绕资产管理搜集的信息,进行这篇文章的api

一、sqlite数据库的基本使用

资产管理的后台数据库用的是sqlite,这个是轻量级的数据库,大家可能对这个数据库很陌生。那么我们就简单的来看看这个数据库是如何使用的?

1、登陆sqlite

[root@localhost ~]# cd Simplecmdb
[root@localhost Simplecmdb]# ls
Boot_django.sh        curl_post_test_v2.sh  db.sqlite3  manage.py         Simplecmdb
curl_post_test_v1.sh  curl_post_test_v3.py  hostinfo    post_hostinfo.py
[root@localhost Simplecmdb]# python manage.py shell
/usr/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py:58: RuntimeWarning: SQLite received a naive datetime (2015-03-03 16:18:21.229988) while time zone support is active.
  RuntimeWarning)
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
Type "copyright", "credits" or "license" for more information.

IPython 1.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]:

2、查看models.py

文件中有Host和HostGroup两个类,每个类中都定义了字段名和数据类型

[root@localhost Simplecmdb]# cat hostinfo/models.py
from django.db import models

# Create your models here.
class Host(models.Model):
    hostname = models.CharField(max_length=50)
    ip = models.IPAddressField()
    osversion = models.CharField(max_length=50)
    memory = models.CharField(max_length=50)
    disk = models.CharField(max_length=50)
    vendor_id = models.CharField(max_length=50)
    model_name = models.CharField(max_length=50)
    cpu_core = models.CharField(max_length=50)
    product = models.CharField(max_length=50)
    Manufacturer = models.CharField(max_length=50)
    sn = models.CharField(max_length=50)

    def __str__(self):
	return self.hostname

class HostGroup(models.Model):
    groupname = models.CharField(max_length=50)
    members = models.ManyToManyField(Host)

3、将资产管理数据结构导入到当前的环境中并使用

In [1]: from hostinfo.models import *

In [3]: HostGroup.    #有很多方法可以使用
HostGroup.DoesNotExist             HostGroup.delete                   HostGroup.save
HostGroup.MultipleObjectsReturned  HostGroup.full_clean               HostGroup.save_base
HostGroup.add_to_class             HostGroup.members                  HostGroup.serializable_value
HostGroup.clean                    HostGroup.mro                      HostGroup.unique_error_message
HostGroup.clean_fields             HostGroup.objects                  HostGroup.validate_unique
HostGroup.copy_managers            HostGroup.pk                       
HostGroup.date_error_message       HostGroup.prepare_database_save  

In [3]: HostGroup.objects.all()    #查看类中所有的对象(5个),返回值为列表
Out[3]: [<HostGroup: HostGroup object>, <HostGroup: HostGroup object>, <HostGroup: HostGroup object>, <HostGroup: HostGroup object>, <HostGroup: HostGroup object>]

In [5]: hg = HostGroup.objects.all()[0]    #取第一个对象并赋值为hg

In [6]: hg.    #hg中的方法
hg.DoesNotExist             hg.delete                   hg.objects                  hg.serializable_value
hg.MultipleObjectsReturned  hg.full_clean               hg.pk                       hg.unique_error_message
hg.clean                    hg.groupname                hg.prepare_database_save    hg.validate_unique
hg.clean_fields             hg.id                       hg.save                     
hg.date_error_message       hg.members                  hg.save_base                

In [6]: hg.groupname    #查看对应的组的名字
Out[6]: u'nginx'

In [7]: hg.members    #查看成员,返回值是一个对象,是对象就有方法和属性
Out[7]: <django.db.models.fields.related.ManyRelatedManager at 0x2156f10>

In [8]: hg.members.all()    #查看所有成员
Out[8]: [<Host: nginx_master.com>, <Host: nginx_slave.com>]

In [10]: h = hg.members.all()[0]

In [12]: h.
h.DoesNotExist             h.delete                   h.memory                   h.save
h.Manufacturer             h.disk                     h.model_name               h.save_base
h.MultipleObjectsReturned  h.full_clean               h.objects                  h.serializable_value
h.clean                    h.hostgroup_set            h.osversion                h.sn
h.clean_fields             h.hostname                 h.pk                       h.unique_error_message
h.cpu_core                 h.id                       h.prepare_database_save    h.validate_unique
h.date_error_message       h.ip                       h.product                  h.vendor_id

In [12]: h.hostname
Out[12]: u'nginx_master.com'

In [13]: h.ip
Out[13]: u'192.168.1.200'

In [14]: h.ip = '192.168.1.234'    #修改记录

In [15]: h.ip
Out[15]: '192.168.1.234'

In [16]: h.save()    #保存到数据库中,会在后台admin页面中看到


二、api(json)

1、实现json格式api的草图

wKiom1T1ceryZA3XAAGIRi796SY810.jpg

2、在命令行中实现上述效果

[root@localhost Simplecmdb]# python manage.py shell
/usr/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py:58: RuntimeWarning: SQLite received a naive datetime (2015-03-03 16:36:45.158750) while time zone support is active.
  RuntimeWarning)
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
Type "copyright", "credits" or "license" for more information.

IPython 1.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from hostinfo.models import *

In [2]: d = []

In [3]: hg = HostGroup.objects.all()

In [4]: for g in hg:
   ...:         ret = {'groupname':g.groupname,'members':[]}
   ...:         for h in g.members.all():
   ...:                 ret_h = {'hostname':h.hostname,'ip':h.ip}
   ...:                 ret['members'].append(ret_h)
   ...:         d.append(ret)
   ...:         

In [5]: print d
[{'groupname': u'nginx', 'members': [{'ip': u'192.168.1.234', 'hostname': u'nginx_master.com'}, {'ip': u'192.168.1.201', 'hostname': u'nginx_slave.com'}]}, {'groupname': u'mongodb', 'members': [{'ip': u'192.168.1.121', 'hostname': u'mongodb.com'}]}, {'groupname': u'db', 'members': [{'ip': u'192.168.1.105', 'hostname': u'mysql_master.com'}, {'ip': u'192.168.1.106', 'hostname': u'mysql_slave.com'}]}, {'groupname': u'tomcat', 'members': [{'ip': u'192.168.1.109', 'hostname': u'tomcat_node1.com'}, {'ip': u'192.168.1.110', 'hostname': u'tomcat_node2.com'}, {'ip': u'192.168.1.111', 'hostname': u'tomcat_node3.com'}, {'ip': u'192.168.1.112', 'hostname': u'tomcat_node4.com'}]}, {'groupname': u'memcached', 'members': [{'ip': u'192.168.1.120', 'hostname': u'memory.com'}]}]

对上述列表遍历能看的更清楚
In [6]: for i in d:
   ...:     print i
   ...:     
{'groupname': u'nginx', 'members': [{'ip': u'192.168.1.234', 'hostname': u'nginx_master.com'}, {'ip': u'192.168.1.201', 'hostname': u'nginx_slave.com'}]}
{'groupname': u'mongodb', 'members': [{'ip': u'192.168.1.121', 'hostname': u'mongodb.com'}]}
{'groupname': u'db', 'members': [{'ip': u'192.168.1.105', 'hostname': u'mysql_master.com'}, {'ip': u'192.168.1.106', 'hostname': u'mysql_slave.com'}]}
{'groupname': u'tomcat', 'members': [{'ip': u'192.168.1.109', 'hostname': u'tomcat_node1.com'}, {'ip': u'192.168.1.110', 'hostname': u'tomcat_node2.com'}, {'ip': u'192.168.1.111', 'hostname': u'tomcat_node3.com'}, {'ip': u'192.168.1.112', 'hostname': u'tomcat_node4.com'}]}
{'groupname': u'memcached', 'members': [{'ip': u'192.168.1.120', 'hostname': u'memory.com'}]}

3、api(json)

 3.1、添加访问的api的url

[root@localhost Simplecmdb]# vim Simplecmdb/urls.py

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'Simplecmdb.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^hostinfo$','hostinfo.views.index'),
    url(r'^hostinfo/getjson$','hostinfo.views.getjson'),
)

  3.2、定义响应请求的视图文件

[root@localhost Simplecmdb]# vim hostinfo/views.py

from django.shortcuts import render
from django.http import HttpResponse
from hostinfo.models import Host
from hostinfo.models import HostGroup
import pickle
import json

# Create your views here.
def index(req):
    if req.method == 'POST':
        pick_obj = json.loads(req.body)
        hostname = pick_obj['hostname']
        ip = pick_obj['ip']
        osversion = pick_obj['osversion']
        memory = pick_obj['memory']
        disk = pick_obj['disk']
        vendor_id = pick_obj['vendor_id']
        model_name = pick_obj['model_name']
        cpu_core = pick_obj['cpu_core']
        product = pick_obj['product']
        Manufacturer = pick_obj['Manufacturer']
        sn = pick_obj['sn']

        try:
            host = Host.objects.get(hostname=hostname)
        except:
            host = Host()
        host.hostname = hostname
        host.ip = ip
        host.osversion = osversion
        host.memory = memory
        host.disk = disk
        host.vendor_id = vendor_id
        host.model_name = model_name
        host.cpu_core = cpu_core
        host.product = product
        host.Manufacturer = Manufacturer
        host.sn = sn
        host.save()
        return HttpResponse('ok')
    else:
        return HttpResponse('no data')

#添加如下行
def getjson(req):
    hg = HostGroup.objects.all()
    d = []
    for g in hg:
        ret = {'groupname':g.groupname,'members':[]}
        for h in g.members.all():
            ret_h = {'hostname':h.hostname,'ip':h.ip}
            ret['members'].append(ret_h)
        d.append(ret)
    return HttpResponse(json.dumps(d))

 3.3、浏览器访问(需要注意,必须启动JSONView才能如下显示)

wKiom1T1dDKAtFxuAAKWTNNAZ4Y749.jpg

wKioL1T1dRDxglJ0AAHj_eNw-I8874.jpg



三、api(shell)

1、实现json格式api的草图

API
-----shell格式-----
web  node1 192.168.1.10
web  node2 192.168.1.11
db   node3 192.168.1.11

2、api(shell)

2.1、添加访问的api的url

[root@localhost Simplecmdb]# vim Simplecmdb/urls.py

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'Simplecmdb.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^hostinfo$','hostinfo.views.index'),
    url(r'^hostinfo/getjson$','hostinfo.views.getjson'),
    url(r'^hostinfo/gettxt$','hostinfo.views.gettxt'),
)

2.2、定义响应请求的视图文件

[root@localhost Simplecmdb]# vim hostinfo/views.py

from django.shortcuts import render
from django.http import HttpResponse
from hostinfo.models import Host
from hostinfo.models import HostGroup
import pickle
import json

# Create your views here.
def index(req):
    if req.method == 'POST':
        pick_obj = json.loads(req.body)
        hostname = pick_obj['hostname']
        ip = pick_obj['ip']
        osversion = pick_obj['osversion']
        memory = pick_obj['memory']
        disk = pick_obj['disk']
        vendor_id = pick_obj['vendor_id']
        model_name = pick_obj['model_name']
        cpu_core = pick_obj['cpu_core']
        product = pick_obj['product']
        Manufacturer = pick_obj['Manufacturer']
        sn = pick_obj['sn']

        try:
            host = Host.objects.get(hostname=hostname)
        except:
            host = Host()
        host.hostname = hostname
        host.ip = ip
        host.osversion = osversion
        host.memory = memory
        host.disk = disk
        host.vendor_id = vendor_id
        host.model_name = model_name
        host.cpu_core = cpu_core
        host.product = product
        host.Manufacturer = Manufacturer
        host.sn = sn
        host.save()
        return HttpResponse('ok')
    else:
        return HttpResponse('no data')


def getjson(req):
    hg = HostGroup.objects.all()
    d = []
    for g in hg:
        ret = {'groupname':g.groupname,'members':[]}
        for h in g.members.all():
            ret_h = {'hostname':h.hostname,'ip':h.ip}
            ret['members'].append(ret_h)
        d.append(ret)
    return HttpResponse(json.dumps(d))

#添加如下行
def gettxt(req):
    str = ''
    hg = HostGroup.objects.all()
    for g in hg:
        for h in g.members.all():
            str += g.groupname + h.hostname + ' ' + h.ip + ' ' + '\n'
    return HttpResponse(str)

2.3 浏览器访问

wKiom1T1dYrwvv9iAAGeTnWCGbU386.jpg

2.4 命令行访问

[root@localhost ~]# curl http://192.168.1.210/hostinfo/gettxt
nginxnginx_master.com 192.168.1.234 
nginxnginx_slave.com 192.168.1.201 
mongodbmongodb.com 192.168.1.121 
dbmysql_master.com 192.168.1.105 
dbmysql_slave.com 192.168.1.106 
tomcattomcat_node1.com 192.168.1.109 
tomcattomcat_node2.com 192.168.1.110 
tomcattomcat_node3.com 192.168.1.111 
tomcattomcat_node4.com 192.168.1.112 
memcachedmemory.com 192.168.1.120


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python[7] :Python制作j

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python[7] :Python制作j

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。继承前几篇文
2023-01-31

JavaScript ,Python,j

常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:选择排序  选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n2) 的时间复杂度。所以用到它的时候,数据规模越小越
2023-01-31

Python学习之利用Python处理J

最近在研究利用zabbix的自动发现功能来监控一台服务器上的多个Redis端口。网上有篇文章写个Python程序来发现Redis端口并显示成JSON格式。这里就学习下Python如何处理JSON格式数据。处理JSON,需要用到python的
2023-01-31

[Python实战]Python制作天气

来源:Python高效编程作者:flywind以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件。开发环境Python3PyQt5requests准备工作首先要获取不同
2023-01-31

python制作缩略图

给一个文件夹里的所有图片进行缩略,代码:import osimport globfrom PIL import Imagedef thumbnail_pic(path): a=glob.glob(r'./*.jpg') for
2023-01-31

Python简单制作GIF

# _author_ == ‘ljh’ import imageio import glob import re from PIL import Image, ImageDraw, ImageFont, ImageColor# modif
2023-01-31

python文件操作--复制

文件的写入和文件的读取一样,文件的写入也有多种方法,write()和writelines()方法。二者之间的区别是:write()方法用于将字符串写入文件,如果要写入文件的字符串不多,使用write()方法即可,writelines()用于
2023-01-31

Python+Wordpress制作小说站

我用Python和Wordpress建了一个小说站。 下面主要讲一讲搭建过程中所用的技术。主要分为以下几个部分:Wordpress主题的选取小说内容的完善站点的部署微信公众平台的搭建1、Wordpress主题的选取 由于自己对php代码编写
2022-06-04

Python制作简单表格

import xlsxwriterworkbook=xlsxwriter.Workbook('chart.xlsx')sheet1=workbook.add_worksheet('chart')bold=workbook.add_forma
2023-01-31

VII Python(7)爬虫

VII Python(7)爬虫 网络爬虫(网页蜘蛛):python访问互联网:urllib和urllib2模块(python2.*分urllib和urllib2;python3..4.1中把urllib和urllib2合并统一为一个包pac
2023-01-31

Install python on AIX 7

Download python install software from website http://www.aixtools.net/index.php/Packagesftp pyton install software "aixt
2023-06-04

用 Python 绘制数据的7种流行的方法

本篇文章比较七个在 Python 中绘图的库和 API,看看哪个最能满足你的需求。

python怎么制作词云图

制作Python词云图在Python中使用wordcloud库轻松创建词云图,可视化文本中高频单词。准备文本数据后,使用WordCloud对象、频率字典和generate()方法生成图像。自定义选项包括字体、形状、布局、颜色方案和高级配置,如停止词处理和词频缩放。示例代码演示了如何从文本文件中创建词云图,并使用matplotlib显示结果。
python怎么制作词云图
2024-04-11

python怎么制作词云图

要制作词云图,可以借助Python中的wordcloud包来实现。首先,需要安装wordcloud包。可以使用以下命令安装:```pythonpip install wordcloud```安装完成后,可以按照以下步骤制作词云图:1. 导入
2023-08-18

[Python]将你的module制作成

python解释器查找module进行加载的时候,查找的目录是存放在sys.path变量中的,sys.path变量中包含文件的当前目录。如果你想使用一个存放在其他目录的脚本,或者是其他系统的脚本,你可以将这些脚本制作成一个安装包,然后安装到
2023-01-31

怎么用Python制作图片

这篇文章主要介绍“怎么用Python制作图片”,在日常操作中,相信很多人在怎么用Python制作图片问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python制作图片”的疑惑有所帮助!接下来,请跟着小编
2023-06-15

Python如何制作子弹图

这篇文章将为大家详细讲解有关Python如何制作子弹图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、什么是子弹图一个子弹图约定俗成的定义:子弹图使用长度/高度、位置和颜色对数据进行编码,以显示与目标和
2023-06-22

Python简单安装包制作

参考:https://my.oschina.net/leopardsaga/blog/174021http://blog.csdn.net/bin381/article/details/528228491、项目目录下创建 setup.py
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录