<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## **一、啟用admin** 前面,我們已經完成了數據收集客戶端的編寫和測試,下面我們就可以在admin中展示和管理資產數據了。 首先,通過`python manage.py createsuperuser`創建一個管理員賬戶。 然后,進入`/assets/admin.py`文件,寫入下面的代碼: ~~~ from django.contrib import admin # Register your models here. from assets import models class NewAssetAdmin(admin.ModelAdmin): list_display = ['asset_type', 'sn', 'model', 'manufacturer', 'c_time', 'm_time'] list_filter = ['asset_type', 'manufacturer', 'c_time'] search_fields = ('sn',) class AssetAdmin(admin.ModelAdmin): list_display = ['asset_type', 'name', 'status', 'approved_by', 'c_time', "m_time"] admin.site.register(models.Asset, AssetAdmin) admin.site.register(models.Server) admin.site.register(models.StorageDevice) admin.site.register(models.SecurityDevice) admin.site.register(models.BusinessUnit) admin.site.register(models.Contract) admin.site.register(models.CPU) admin.site.register(models.Disk) admin.site.register(models.EventLog) admin.site.register(models.IDC) admin.site.register(models.Manufacturer) admin.site.register(models.NetworkDevice) admin.site.register(models.NIC) admin.site.register(models.RAM) admin.site.register(models.Software) admin.site.register(models.Tag) admin.site.register(models.NewAssetApprovalZone, NewAssetAdmin) ~~~ 利用剛才創建的管理員用戶,登錄admin站點: ![](https://img.kancloud.cn/18/ac/18ac01f090fe1a4a115527dd96c46229_976x875.png) 這里略微對admin界面做了些簡單地配置,但目前還沒有數據。 <br /> ## **二、創建新資產** 前面我們只是在Pycharm中獲取并打印數據,并沒有將數據保存到數據庫里。下面我們來實現這一功能。 修改/assets/views.py文件,代碼如下: ``` from django.shortcuts import render from django.shortcuts import HttpResponse from django.views.decorators.csrf import csrf_exempt import json from assets import models from assets import asset_handler # Create your views here. @csrf_exempt def report(request): """ 通過csrf_exempt裝飾器,跳過Django的csrf安全機制,讓post的數據能被接收,但這又會帶來新的安全問題。 可以在客戶端,使用自定義的認證token,進行身份驗證。這部分工作,請根據實際情況,自己進行。 :param request: :return: """ if request.method == "POST": asset_data = request.POST.get('asset_data') data = json.loads(asset_data) # 各種數據檢查,請自行添加和完善! if not data: return HttpResponse("沒有數據!") if not issubclass(dict, type(data)): return HttpResponse("數據必須為字典格式!") # 是否攜帶了關鍵的sn號 sn = data.get('sn', None) if sn: # 進入審批流程 # 首先判斷是否在上線資產中存在該sn asset_obj = models.Asset.objects.filter(sn=sn) if asset_obj: # 進入已上線資產的數據更新流程 pass return HttpResponse("資產數據已經更新!") else: # 如果已上線資產中沒有,那么說明是未批準資產,進入新資產待審批區,更新或者創建資產。 obj = asset_handler.NewAsset(request, data) response = obj.add_to_new_assets_zone() return HttpResponse(response) else: return HttpResponse("沒有資產sn序列號,請檢查數據!") return HttpResponse('200 ok') ``` report視圖的邏輯是這樣的: * **sn是標識一個資產的唯一字段,必須攜帶,不能重復!** * 從POST中獲取發送過來的數據; * 使用json轉換數據類型; * 進行各種數據檢查(比如身份驗證等等,請自行完善); * 判斷數據是否為空,空則返回錯誤信息,結束視圖; * 判斷data的類型是否字典類型,否則返回錯誤信息; * 之所以要對data的類型進行判斷是因為后面要大量的使用字典的get方法和中括號操作; * 如果沒有攜帶sn號,返回錯誤信息; 當前面都沒問題時,進入下面的流程: * 首先,利用sn值嘗試在已上線的資產進行查找,如果有,則進入已上線資產的更新流程,具體實現,這里暫且跳過; * 如果沒有,說明這是個新資產,需要添加到新資產區; * 這里又分兩種情況,一種是徹底的新資產,那沒得說,需要新增;另一種是新資產區已經有了,但是審批員還沒來得及審批,資產數據的后續報告就已經到達了,那么需要更新數據。 * 創建一個`asset_handler.NewAsset()`對象,然后調用它的`obj.add_to_new_assets_zone()`方法,進行數據保存,并接收返回結果; * asset\_handler是下面我們要新建的資產處理模塊,NewAsset是其中的一個類。 ![](https://img.kancloud.cn/30/34/303436a081503162039fc983c419496d_862x484.png) 為了不讓`views.py`文件過于龐大,通常會建立新的py文件,專門處理一些核心業務。 在assets下新建`asset_handler.py`文件,并寫入下面的代碼: ~~~ import json from assets import models class NewAsset(object): def __init__(self, request, data): self.request = request self.data = data def add_to_new_assets_zone(self): defaults = { 'data': json.dumps(self.data), 'asset_type': self.data.get('asset_type'), 'manufacturer': self.data.get('manufacturer'), 'model': self.data.get('model'), 'ram_size': self.data.get('ram_size'), 'cpu_model': self.data.get('cpu_model'), 'cpu_count': self.data.get('cpu_count'), 'cpu_core_count': self.data.get('cpu_core_count'), 'os_distribution': self.data.get('os_distribution'), 'os_release': self.data.get('os_release'), 'os_type': self.data.get('os_type'), } models.NewAssetApprovalZone.objects.update_or_create(sn=self.data['sn'], defaults=defaults) return '資產已經加入或更新待審批區!' ~~~ NewAsset類接收兩個參數,request和data,分別封裝了請求和資產數據,它的唯一方法`obj.add_to_new_assets_zone()`中,首先構造了一個defaults字典,分別將資產數據包的各種數據打包進去,然后利用Django中特別好用的`update_or_create()`方法,進行數據保存! `update_or_create()`方法的機制:如果數據庫內沒有該數據,那么新增,如果有,則更新,這就大大減少了我們的代碼量,不用寫兩個方法。該方法的參數必須為一些用于查詢的指定字段(這里是sn),以及需要新增或者更新的defaults字典。而其返回值,則是一個查詢對象和是否新建對象布爾值的二元元組。 <br /> ## **三、測試數據** 重啟CMDB,在Client中使用`python main.py report_data`,發送一個資產數據給CMDB服務器,結果如下: ~~~ (venv) D:\work\2019\for_test\CMDB\Client\bin>python main.py report_data 正在將數據發送至: [http://192.168.0.100:8000/assets/report/] ...... ?[31;1m發送完畢!?[0m 返回結果:資產已經加入或更新待審批區! 日志記錄成功! ~~~ 再進入admin后臺,查看新資產待審批區,可以看到資產已經成功進入待審批區: ![](https://img.kancloud.cn/4f/f3/4ff37915db5e26885f65724976289a79_1240x428.png) ![](https://img.kancloud.cn/6f/f8/6ff80b8ad54bd6b8d07b87c06d8e89d0_781x879.png) 這里我們顯示了資產的匯報和更新日期,過幾分鐘后,重新匯報該資產數據,然后刷新admin中的頁面,可以看到,待審批區的資產數據也一并被更新了。 ![](https://img.kancloud.cn/2d/54/2d54c6701b623cf8c48282129cd7820b_1240x431.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看