日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

來源:程序員人生   發布時間:2014-10-04 08:00:00 閱讀次數:3958次
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的節點樹,附上簡單代碼,不詳解:

                {% 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 %}
                生活不易,碼農辛苦
                如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
                程序員人生
                ------分隔線----------------------------
                分享到:
                ------分隔線----------------------------
                關閉
                程序員人生
                主站蜘蛛池模板: 日韩欧美精品在线观看 | 性夜剧场久久久 | 国产福利av | 精品久久久久一区二区国产 | 黄网站在线免费 | a级片毛片| 国产精品久久九九 | 久久久久久久 | 欧美一区视频 | 国产欧美一区二区精品性色 | 亚洲视频免费观看 | 91精品国产高清久久久久久久久 | 日韩一区二区三区在线播放 | 一区二区三区四区在线播放 | 久久久久久穴 | 久久久精品国产 | 国产男女免费完整视频 | 国产这里只有精品 | 亚洲福利小视频 | 视频精品一区二区三区 | 成人97精品毛片免费看 | 99re视频 | 久精品视频 | 不用播放器看av | 国产精品视频大全 | 国产精品自在线拍国产 | 成人国产精品视频 | 久久中文在线 | 亚洲精品尤物福利在线一区 | 综合中文字幕 | 在线一区二区三区 | 一二三区在线观看 | 成人高潮aa毛片免费 | 日韩精品视频免费在线观看 | 久久综合五月天 | 欧美在线播放 | 日韩欧美手机在线 | av毛片在线 | 午夜视频在线观看一区 | 国产伦精品一区二区三区视频黑人 | 亚洲国产黄色 |