多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > openstack頁面自定義插件使用詳解(django、ajax、post)(zTree為例)

openstack頁面自定義插件使用詳解(django、ajax、post)(zTree為例)

來源:程序員人生   發布時間:2014-10-04 08:00:00 閱讀次數:3948次
1、鑒于國內java開發人員比較多,java web方面的技術比較成熟。所以用python django(openstack)框架和java的strurs做個類比,讓大家能夠更直觀的理解、更快的進入到開發中:

附圖大致對比下,具體細節,自行查找相關資料:

2、接下來正式開始講解,如何在openstack中使用自定義插件,本文以Jquery zTree樹形插件為例。
第一步封裝url地址,請求數據,在urls中自定義url:
為了方便后續大家復制代碼,也順帶附上源代碼
urlpatterns = patterns('',
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<tenant_id>[^/]+)/update/$',views.UpdateIsolationView.as_view(), name='update'),
    url(r'^(?P<tenant_id>[^/]+)/tree/$',views.TreeView.as_view(), name='tree'),
    url(r'^(?P<tenant_id>[^/]+)/get_tree_data/$',views.JSONGetView.as_view(), name='get_tree_data'),
    url(r'^(?P<tenant_id>[^/]+)/set_tree$',views.JSONSetView.as_view(), name='set_tree'),
)


3、根據url規則匹配到對應的views的JSONGetView類:

from django.views import generic
from django.http import HttpResponse # noqa
import json
class JSONGetView(generic.View):
    def get(self, request, *args, **kwargs): #定義get方法
        tenant_id = self.kwargs["tenant_id"] #從url中截取參數值tenant_id
        aggregates = []
        try:
            aggregates = api.nova.aggregate_details_list(self.request)
            api.nova.isolatation_tree_list(self.request, tenant_id)
        except Exception:
            exceptions.handle(request,
                              _('Unable to retrieve host aggregates list.'))
        aggregates.sort(key=lambda aggregate: aggregate.name.lower())
#調用底層api 構造 zTree的數據
        tree_list = []
        for ag in aggregates:
            tree_data = {}
            tree_data['id'] = ag.availability_zone
            tree_data['name'] = ag.availability_zone
            tree_data['pId'] = 'NULL'
            tree_data['open'] = 'true'
            if tree_data not in tree_list:
                tree_list.append(tree_data)
            tree_data = {}
            tree_data['id'] = ag.name
            tree_data['name'] = ag.name
            tree_data['pId'] = ag.availability_zone
            tree_data['open'] = 'true'
            if tree_data not in tree_list:
                tree_list.append(tree_data)
            for hostname in ag.hosts:
                tree_data = {}
                tree_data['id'] = hostname
                tree_data['name'] = hostname
                tree_data['pId'] = ag.name
                tree_data['open'] = 'true'
                if tree_data not in tree_list:
                    tree_list.append(tree_data)
        result = json.dumps(tree_list) #此處將python對象轉換成json對象
        print (result)
        return HttpResponse(result,content_type="application/json")

4、到此獲取數據的url完成,測試下url(瀏覽器直接訪問):
http://192.168.10.31/dashboard/admin/isolations/2a4fe5e733e44982b1d576c5a0fe4bfd/get_tree_data/
得到數據:
[{
 "open": "true",
 "pId": "NULL",
 "id": "zone1",
 "name": "zone1"
},
{
 "open": "true",
 "pId": "zone1",
 "id": "ag1",
 "name": "ag1"
},
{
 "open": "true",
 "pId": "ag1",
 "id": "node32",
 "name": "node32"
},
{
 "open": "true",
 "pId": "ag1",
 "id": "node31",
 "name": "node31"
},
{
 "open": "true",
 "pId": "zone1",
 "id": "ag2",
 "name": "ag2"
},
{
 "open": "true",
 "pId": "ag2",
 "id": "node33",
 "name": "node33"
},
{
 "open": "true",
 "pId": "NULL",
 "id": "zone2",
 "name": "zone2"
},
{
 "open": "true",
 "pId": "zone2",
 "id": "ag3",
 "name": "ag3"
},
{
 "open": "true",
 "pId": "ag3",
 "id": "node35",
 "name": "node35"
},
{
 "open": "true",
 "pId": "ag3",
 "id": "node34",
 "name": "node34"
}]
url能正確獲取數據,測試通過。


5、用ajax在html頁面中請求該url獲取數據:
先附上頁面模板代碼:

其中javascript要寫在標簽{% block modal-body %}中才能失效,具體的zTree的js導入本文使用了為壓縮的方式,直接導入。


{# add by ttx 2014-9-25#}
  <link rel="stylesheet" href="{{ STATIC_URL }}dashboard/js/zTree/css/demo.css" type="text/css">
 <link rel="stylesheet" href="{{ STATIC_URL }}dashboard/js/zTree/css/zTreeStyle/zTreeStyle.css" type="text/css">
 <script type="text/javascript" src="{{ STATIC_URL }}dashboard/js/zTree/js/jquery.ztree.core-3.5.js"></script>
 <script type="text/javascript" src="{{ STATIC_URL }}dashboard/js/zTree/js/jquery.ztree.excheck-3.5.js"></script>
zTree插件路徑:

詳解ajax請求:
var url = '/dashboard/admin/isolations/{{ tenant_id }}/get_tree_data'; #此處為ajax的url地址,與步驟4中瀏覽器訪問一致
 $.ajax({ #其中$代表Jquery插件,ajax為Jquery插件的方法
             type: "get", #type主要有get、post。其中get用于獲取數據,是冪等操作、post用于跟新數據
             async: false, #false代碼同步刷新,true代表異步刷新。本示例需要等到數據返回再進行tree的渲染,因此需要同步
             url: url, #請求的url地址
             dataType: "json", #數據返回類型為json
              success: function (data) { #ajax請求成功之后得到數據data,執行success:后面function里面代碼
                           json = JSON.stringify(data);
                           host_tree_data = JSON.parse(json)
                }
});
更多ajax詳細使用講解請自行參考相關資料。

后續就是具體的zTree根據得到的數據host_tree_data ,生成zone、aggregate、host的節點樹,附上簡單代碼,不詳解:
<tr id="3rd7p"></tr>
    {% extends "horizon/common/_modal_form.html" %}
    {% load i18n %}
    {% load url from future %}
    {% block form_id %}create_image_form{% endblock %}
    {% block form_action %}{% url 'horizon:admin:images:create' %}{% endblock %}
    {% block form_attrs %}enctype="multipart/form-data"{% endblock %}
    {% block modal-header %}{% trans "Isolatation tree" %}{% endblock %}
    生活不易,碼農辛苦
    如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
    程序員人生
    ------分隔線----------------------------
    分享到:
    ------分隔線----------------------------
    關閉
    程序員人生
    主站蜘蛛池模板: 性欧美高清videosex | 免费观看无遮挡www的小视频 | jizzjizz免费| 亚洲不卡视频在线 | 一二三四视频免费观看在线看1 | 福利网站在线观看 | 国产精品精品国产一区二区 | 国产在线视频资源 | 国产成人啪午夜精品网站男同 | 成人在激情在线视频 | 操久| 亚洲区欧美区小说区图片区 | 最近的中文字幕在线国语 | 国产在线精品一区二区高清不卡 | 欧美精品a毛片免费观看 | 鸥美性生交xxxxx久久久 | 日本亚洲网站 | 日本在线观看www免费 | 朝鲜女人free性hd年轻 | 欧美第一页在线观看 | 最近最新中文字幕大全2019免费视频 | 日本欧美韩国专区 | 激情视频网站在线观看 | 一级在线毛片 | 伊人久久亚洲精品一区 | 日韩国产欧美在线观看 | 亚洲伊人久久在 | 91亚洲综合| 亚洲欧美视频一级 | 国产美女一区精品福利视频 | 英国美女一级毛片视频 | 另类一区二区三区 | 久久天堂网| 最近最新日本中文免费 | 98精品视频 | 在线一区观看 | 亚洲欧美专区精品久久 | 日本大片免费播放网站 | 三级黄在线观看 | 久久一区二区精品综合 | 男人看片网站 |