欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python搭建監(jiān)控平臺(tái)的實(shí)現(xiàn)示例

 更新時(shí)間:2023年07月12日 15:22:10   作者:滿載星輝  
本文主要介紹了Python搭建監(jiān)控平臺(tái)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

監(jiān)控和運(yùn)維,是互聯(lián)網(wǎng)工業(yè)鏈上非常重要的一環(huán)。監(jiān)控的目的就是防患于未然。通過(guò)監(jiān)控,我們能夠及時(shí)了解到企業(yè)網(wǎng)絡(luò)的運(yùn)行狀態(tài)。一旦出現(xiàn)安全隱患,你就可以及時(shí)預(yù)警,或者是以其他方式通知運(yùn)維人員,讓運(yùn)維監(jiān)控人員有時(shí)間處理和解決隱患,避免影響業(yè)務(wù)系統(tǒng)的正常使用,將一切問(wèn)題的根源扼殺在搖籃當(dāng)中。

不過(guò),萬(wàn)變不離其宗,運(yùn)維工作最重要的就是維護(hù)系統(tǒng)的穩(wěn)定性。除了熟悉運(yùn)用各種提高運(yùn)維效率的工具來(lái)輔助工作外,云資源費(fèi)用管理、安全管理、監(jiān)控等,都需要耗費(fèi)不少精力和時(shí)間。運(yùn)維監(jiān)控不是一朝一夕得來(lái)的,而是隨著業(yè)務(wù)發(fā)展的過(guò)程中同步和發(fā)展的。

今天我們就使用 Django 這個(gè) Web 框架,來(lái)搭建一個(gè)簡(jiǎn)單的量化監(jiān)控平臺(tái)。

Django 簡(jiǎn)介和安裝

Django 是用 Python 開(kāi)發(fā)的一個(gè)免費(fèi)開(kāi)源的 Web 框架,可以用來(lái)快速搭建優(yōu)雅的高性能網(wǎng)站。它采用的是“MVC”的框架模式,即模型 M、視圖 V 和控制器 C。

Django 最大的特色,在于將網(wǎng)頁(yè)和數(shù)據(jù)庫(kù)中復(fù)雜的關(guān)系,轉(zhuǎn)化為 Python 中對(duì)應(yīng)的簡(jiǎn)單關(guān)系。它的設(shè)計(jì)目的,是使常見(jiàn)的Web開(kāi)發(fā)任務(wù)變得快速而簡(jiǎn)單。Django是開(kāi)源的,不是商業(yè)項(xiàng)目或者科研項(xiàng)目,并且集中力量解決Web開(kāi)發(fā)中遇到的一系列問(wèn)題。所以,Django 每天都會(huì)在現(xiàn)有的基礎(chǔ)上進(jìn)步,以適應(yīng)不斷更迭的開(kāi)發(fā)需求。這樣既節(jié)省了開(kāi)發(fā)時(shí)間,也提高了后期維護(hù)的效率。

說(shuō)了這么多,接下來(lái),我們通過(guò)上手使用進(jìn)一步來(lái)了解。先來(lái)看一下,如何安裝和使用 Django。你可以先按照下面代碼塊的內(nèi)容來(lái)操作,安裝Django :

pip3?install?Django
django-admin?--version
##########?輸出?##########
2.2.3

接著,我們來(lái)創(chuàng)建一個(gè)新的 Django 項(xiàng)目:

django-admin?startproject?TradingMonitor
cd?TradingMonitor/
python3?manage.py?migrate
##########?輸出?##########
??Applying?contenttypes.0001_initial...?OK
??Applying?auth.0001_initial...?OK
??Applying?admin.0001_initial...?OK
??Applying?admin.0002_logentry_remove_auto_add...?OK
??Applying?admin.0003_logentry_add_action_flag_choices...?OK
??Applying?contenttypes.0002_remove_content_type_name...?OK
??Applying?auth.0002_alter_permission_name_max_length...?OK
??Applying?auth.0003_alter_user_email_max_length...?OK
??Applying?auth.0004_alter_user_username_opts...?OK
??Applying?auth.0005_alter_user_last_login_null...?OK
??Applying?auth.0006_require_contenttypes_0002...?OK
??Applying?auth.0007_alter_validators_add_error_messages...?OK
??Applying?auth.0008_alter_user_username_max_length...?OK
??Applying?auth.0009_alter_user_last_name_max_length...?OK
??Applying?auth.0010_alter_group_name_max_length...?OK
??Applying?auth.0011_update_proxy_permissions...?OK
??Applying?sessions.0001_initial...?OK

這時(shí),你能看到文件系統(tǒng)大概是下面這樣的:

TradingMonitor/
├──?TradingMonitor
│???├──?__init__.py
│???├──?settings.py
│???├──?urls.py
│???└──?wsgi.py
├──?db.sqlite3
└──?manage.py

我簡(jiǎn)單解釋一下它的意思:

  • TradingMonitor/TradingMonitor,表示項(xiàng)目最初的 Python 包;
  • TradingMonitor/init.py,表示一個(gè)空文件,聲明所在目錄的包為一個(gè) Python 包;
  • TradingMonitor/settings.py,管理項(xiàng)目的配置信息;
  • TradingMonitor/urls.py,聲明請(qǐng)求 URL 的映射關(guān)系;
  • TradingMonitor/wsgi.py,表示Python 程序和 Web 服務(wù)器的通信協(xié)議;
  • manage.py,表示一個(gè)命令行工具,用來(lái)和 Django 項(xiàng)目進(jìn)行交互;
  • Db.sqlite3,表示默認(rèn)的數(shù)據(jù)庫(kù),可以在設(shè)置中替換成其他數(shù)據(jù)庫(kù)。

另外,你可能注意到了上述命令中的 python3 manage.py migrate,這個(gè)命令表示創(chuàng)建或更新數(shù)據(jù)庫(kù)模式。每當(dāng) model 源代碼被改變后,如果我們要將其應(yīng)用到數(shù)據(jù)庫(kù)上,就需要執(zhí)行一次這個(gè)命令。

接下來(lái),我們?yōu)檫@個(gè)系統(tǒng)添加管理員賬戶:

python3?manage.py?createsuperuser
##########?輸出?##########
Username?(leave?blank?to?use?'ubuntu'):?admin
Email?address:
Password:
Password?(again):
Superuser?created?successfully.

然后,我們來(lái)啟動(dòng) Django 的 debugging 模式:

python3?manage.py?runserver

最后,打開(kāi)瀏覽器輸入: http://127.0.0.1:8000。如果你能看到下面這個(gè)畫(huà)面,就說(shuō)明 Django 已經(jīng)部署成功了。

alt

Django 的安裝是不是非常簡(jiǎn)單呢?這其實(shí)也是 Python 一貫的理念,簡(jiǎn)潔,并簡(jiǎn)化入門(mén)的門(mén)檻。

OK,現(xiàn)在我們?cè)俣ㄎ坏?http://127.0.0.1:8000/admin,你會(huì)看到 Django 的后臺(tái)管理網(wǎng)頁(yè),這里我就不過(guò)多介紹了。

alt

alt

到此,Django 就已經(jīng)成功安裝,并且正常啟動(dòng)啦。

MVC 架構(gòu)

剛剛說(shuō)過(guò),MVC 架構(gòu)是 Django 設(shè)計(jì)模式的精髓。接下來(lái),我們就來(lái)具體看一下這個(gè)架構(gòu),并通過(guò) Django 動(dòng)手搭建一個(gè)服務(wù)端。

設(shè)計(jì)模型 Model

peewee 這個(gè)庫(kù),它能避開(kāi)通過(guò)繁瑣的 SQL 語(yǔ)句來(lái)操作 MySQL,直接使用 Python 的 class 來(lái)進(jìn)行轉(zhuǎn)換。事實(shí)上,這也是 Django 采取的方式。

Django 無(wú)需數(shù)據(jù)庫(kù)就可以使用,它通過(guò)對(duì)象關(guān)系映射器(object-relational mapping),僅使用Python代碼就可以描述數(shù)據(jù)結(jié)構(gòu)。

我們先來(lái)看下面這段 Model 代碼:

#??TradingMonitor/models.py
from?django.db?import?models
class?Position(models.Model):
????asset?=?models.CharField(max_length=10)
????timestamp?=?models.DateTimeField()
????amount?=?models.DecimalField(max_digits=10,?decimal_places=3)

models.py 文件主要用一個(gè) Python 類來(lái)描述數(shù)據(jù)表,稱為模型 。運(yùn)用這個(gè)類,你可以通過(guò)簡(jiǎn)單的 Python 代碼來(lái)創(chuàng)建、檢索、更新、刪除數(shù)據(jù)庫(kù)中的記錄,而不用寫(xiě)一條又一條的SQL語(yǔ)句,這也是我們之前所說(shuō)的避免通過(guò) SQL 操作數(shù)據(jù)庫(kù)。

在這里,我們創(chuàng)建了一個(gè) Position 模型,用來(lái)表示我們的交易倉(cāng)位信息。其中,

  • asset 表示當(dāng)前持有資產(chǎn)的代碼,例如 btc;
  • timestamp 表示時(shí)間戳;
  • amount 則表示時(shí)間戳?xí)r刻的持倉(cāng)信息。

設(shè)計(jì)視圖 Views

在模型被定義之后,我們便可以在視圖中引用模型了。通常,視圖會(huì)根據(jù)參數(shù)檢索數(shù)據(jù),加載一個(gè)模板,并使用檢索到的數(shù)據(jù)呈現(xiàn)模板。

設(shè)計(jì)視圖,則是我們用來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯的地方。我們來(lái)看 render_positions 這個(gè)代碼,它接受 request 和 asset 兩個(gè)參數(shù),我們先不用管 request。這里的 asset 表示指定一個(gè)資產(chǎn)名稱,例如 btc,然后這個(gè)函數(shù)返回一個(gè)渲染頁(yè)面。

#??TradingMonitor/views.py
from?django.shortcuts?import?render
from?.models?import?Position
def?render_positions(request,?asset):
????positions?=?Position.objects.filter(asset?=?asset)
????context?&#61;?{<!-- -->&#39;asset&#39;:?asset,?&#39;positions&#39;:?positions}
????return?render(request,?&#39;positions.html&#39;,?context)

不過(guò),這個(gè)函數(shù)具體是怎么工作的呢?我們一行行來(lái)看。

  • positions = Position.objects.filter(asset = asset),這行代碼向數(shù)據(jù)庫(kù)中執(zhí)行一個(gè)查詢操作,其中, filter 表示篩選,意思是從數(shù)據(jù)庫(kù)中選出所有我們需要的 asset 的信息。不過(guò),這里我只是為你舉例做示范;真正做監(jiān)控的時(shí)候,我們一般會(huì)更有針對(duì)性地從數(shù)據(jù)庫(kù)中篩選讀取信息,而不是一口氣讀取出所有的信息。
  • context = {'asset': asset, 'positions': positions},這行代碼沒(méi)什么好說(shuō)的,封裝一個(gè)字典。至于這個(gè)字典的用處,下面的內(nèi)容中可以體現(xiàn)。
  • return render(request, 'positions.html', context),最后這行代碼返回一個(gè)頁(yè)面。這里我們采用的模板設(shè)計(jì),這也是 Django 非常推薦的開(kāi)發(fā)方式,也就是讓模板和數(shù)據(jù)分離,這樣,數(shù)據(jù)只需要向其中填充即可。

最后的模板文件是 position.html,你應(yīng)該注意到了, context 作為變量傳給了模板,下面我們就來(lái)看一下設(shè)計(jì)模板的內(nèi)容。

設(shè)計(jì)模板Templates

模板文件,其實(shí)就是 HTML 文件和部分代碼的綜合。你可以想象成,這個(gè)HTML 在最終送給用戶之前,需要被我們預(yù)先處理一下,而預(yù)先處理的方式就是找到對(duì)應(yīng)的地方進(jìn)行替換。

我們來(lái)看下面這段示例代碼:

#??TradingMonitor/templates/positions.html
<!DOCTYPE?html>
<html?lang&#61;&#34;en-US&#34;>
<head>
<title>Positions?for?{<!-- -->{asset}}</title>
</head>
<body>
<h1>Positions?for?{<!-- -->{asset}}</h1>
<table>
<tr>
????<th>Time</th>
????<th>Amount</th>
</tr>
{%?for?position?in?positions?%}
<tr>
????<th>{<!-- -->{position.timestamp}}</th>
????<th>{<!-- -->{position.amount}}</th>
</tr>
{%?endfor?%}
</table>
</body>

我重點(diǎn)說(shuō)一下幾個(gè)地方。首先是 <title>Positions for {{asset}}</title>,這里雙大括號(hào)括住 asset 這個(gè)變量,這個(gè)變量對(duì)應(yīng)的正是前面 context 字典中的 asset key。Django 的渲染引擎會(huì)將 asset ,替換成 context 中 asset 對(duì)應(yīng)的內(nèi)容,此處是替換成了 btc。

再來(lái)看 {% for position in positions %},這是個(gè)很關(guān)鍵的地方。我們需要處理一個(gè)列表的情況,用 for 對(duì) positions 進(jìn)行迭代就行了。這里的 positions ,同樣對(duì)應(yīng)的是 context 中的 positions。

末尾的 {% endfor %},自然就表示結(jié)束了。這樣,我們就將數(shù)據(jù)封裝到了一個(gè)列表之中。

設(shè)計(jì)鏈接 Urls

最后,我們需要為我們的操作提供 URL 接口,具體操作我放在了下面的代碼中,內(nèi)容比較簡(jiǎn)單,我就不詳細(xì)展開(kāi)講解了。

#??TradingMonitor/urls.py

from?django.contrib?import?admin
from?django.urls?import?path
from?.?import?views

urlpatterns?&#61;?[
????path(&#39;admin/&#39;,?admin.site.urls),
????path(&#39;positions/&lt;str:asset&gt;&#39;,?views.render_positions),
]

到這里,我們就可以通過(guò) http://127.0.0.1:8000/positions/btc 來(lái)訪問(wèn)啦!

測(cè)試

當(dāng)然,除了主要流程外,我還需要強(qiáng)調(diào)幾個(gè)很簡(jiǎn)單但非常關(guān)鍵的細(xì)節(jié),不然,我們這些改變就不能被真正地應(yīng)用。

第一步,在 TradingMonitor/TradingMonitor 下,新建一個(gè)文件夾 migrations;并在這個(gè)文件夾中,新建一個(gè)空文件 __init__.py。

mkdir?TradingMonitor/migrations
touch?TradingMonitor/migrations/__init__.py

此時(shí),你的目錄結(jié)構(gòu)應(yīng)該長(zhǎng)成下面這樣:

TradingMonitor/
├──?TradingMonitor
│???├──?migrations
│???????└──?__init__.py
│???├──?templates
│???????└──?positions.html
│???├──?__init__.py
│???├──?settings.py
│???├──?urls.py
│???├──?models.py
│???├──?views.py
│???└──?wsgi.py
├──?db.sqlite3
└──?manage.py

第二步,修改 TradingMonitor/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TradingMonitor',  # 這里把我們的 app 加上
]
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'TradingMonitor/templates')],  # 這里把 templates 的目錄加上
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

第三步,運(yùn)行 python manage.py makemigrations

python?manage.py?makemigrations
##########?輸出?##########
Migrations?for?&#39;TradingMonitor&#39;:
??TradingMonitor/migrations/0001_initial.py
????-?Create?model?Position

第四步,運(yùn)行 python manage.py migrate

python?manage.py?migrate
##########?輸出?##########
Operations?to?perform:
??Apply?all?migrations:?TradingMonitor,?admin,?auth,?contenttypes,?sessions
Running?migrations:
??Applying?TradingMonitor.0001_initial...?OK

這幾步的具體操作,我都用代碼和注釋表示了出來(lái),你完全可以同步進(jìn)行操作。操作完成后,現(xiàn)在,我們的數(shù)據(jù)結(jié)構(gòu)就已經(jīng)被成功同步到數(shù)據(jù)庫(kù)中了。

最后,輸入 python manage.py runserver,然后打開(kāi)瀏覽器輸入 http://127.0.0.1:8000/positions/btc,你就能看到效果啦。

現(xiàn)在,我們?cè)倩剡^(guò)頭來(lái)看一下 MVC 模式,你可以看到,M、V、C這三者,以一種插件似的、松耦合的方式連接在一起:

alt

當(dāng)然,我?guī)銓?xiě)的只是一個(gè)簡(jiǎn)單的 Django 應(yīng)用程序,對(duì)于真正的量化平臺(tái)監(jiān)控系統(tǒng)而言,這還只是一個(gè)簡(jiǎn)單的開(kāi)始。

除此之外,對(duì)于監(jiān)控系統(tǒng)來(lái)說(shuō),其實(shí)還有著非常多的開(kāi)源插件可以使用。有一些界面非??犰牛幸恍┛梢宰龅胶芨叩姆€(wěn)定性和易用性,它們很多都可以結(jié)合 Django 做出很好的效果來(lái)。比較典型的有:

  • Graphite 是一款存儲(chǔ)時(shí)間序列數(shù)據(jù),并通過(guò) Django Web 應(yīng)用程序在圖形中顯示的插件;
  • Vimeo 則是一個(gè)基于 Graphite 的儀表板,具有附加功能和平滑的設(shè)計(jì);
  • Scout 監(jiān)控 Django和Flask應(yīng)用程序的性能,提供自動(dòng)檢測(cè)視圖、SQL查詢、模板等。

總結(jié)

本文,我們以 Django 這個(gè) Python 后端為例,講解了搭建一個(gè)服務(wù)端的過(guò)程。你應(yīng)該發(fā)現(xiàn)了,使用 RESTful Framework 搭建服務(wù)器是如此的簡(jiǎn)單呀!

到此這篇關(guān)于Python搭建監(jiān)控平臺(tái)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python搭建監(jiān)控平臺(tái)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論