django搭建一個小型的服務器運維網站-拿來即用的bootstrap模板


目錄

  1. 項目介紹和源碼
  2. 拿來即用的bootstrap模板;
  3. 服務器SSH服務配置與python中paramiko的使用
  4. 用戶登陸與session;
  5. 最簡單的實踐之修改服務器時間
  6. 查看和修改服務器配置與數據庫的路由
  7. 基於websocket的實時日志實現
  8. 查看服務器中的日志與前端的datatable的利用;
  9. 重啟服務器某個進程;

前言

  想要快速的搭建好一個網站,前端必然少不了,如果自己大費周折在怎么去從0到1創建一個前端工作量就會太大了,所以最簡單的方法是直接在網上尋找已經寫好的前端模板資源,這樣的資源可以直接百度/谷歌關鍵詞:bootstrap前端模板,搜索會出來很多的模板,選擇覺得合適的模板就可以拿來作為自己網站的前端了。

下載前端模板

  文章中用到的模板叫做DASHGUM,點擊該鏈接可以去預覽下這個前端資源的樣子,現在,准備把該模板下載下來,我們要把它改造成適合自己需求的樣子。
  模板資源下載OK,打開資源可以看到圖1中資源的內容,這些內容是可以縮減的,用到的時候取里面的組件就好,只要css、js、assets文件在,並且被正確引用,組件的邏輯響應和樣式都不需要我們自己過多的考慮。

圖1 DASHGUM中的內容

創建項目

  我的django版本是1.11.10,直接可以通過pip安裝(安裝過程中如果提示缺什么庫就補什么庫),python是2.7的版本。准備就緒,開始創建項目。在目錄下執行django-admin.py startproject WebTool,項目根目錄下django-admin.py startapp server創建一個app,然后在根目錄下創建一個templates文件夾用來存放前端資源,在templates文件夾下創建一個app專屬的資源文件夾命名為servermaterial,把DASHGUM中的內容放在該目錄下,最后的項目結構如圖2所示。
圖2 項目結構

簡單顯示

修改settings

  • INSTALLED_APPS增加server:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'server', ]
  • MIDDLEWARE注釋掉django.middleware.csrf.CsrfViewMiddleware。
  • 添加資源的相關配置:
STATIC_URL = '/templates/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, "templates"), )
  • TEMPLATES的'DIRS'字段增加templates:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['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', ], }, }, ]

修改資源

  我們想要顯示index.html,於是打開index.html,修改其所有的css和js資源的href,如圖3,圖片只給出了css資源路徑的修改,js資源同理修改,在其前面加上/templates/servermaterial/這個資源路徑:

圖3 修改資源路徑

修改項目的urls

  這里,考慮到項目的urls自身會處理諸如登陸的邏輯,並且一個項目可能會有多個app的情況,我們把這個index.html給server這個app自己去處理,在WebTool下的urls.py中增加一個路由到server的urls中,代碼如下:

from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^server/', include('server.urls', namespace="server")), ]

app的urls和views

  • 增加urls文件

  app(本文中的app即server)本身不含有urls文件,我們需要自己創建一個路由文件,用來在app內部路由,代碼如下。

from django.conf.urls import url import views urlpatterns = [ url(r'^$', views.homepage), url(r'^home', views.homepage), ]
  • 修改views文件

  views文件收到urls的請求,將index.html渲染出來,代碼如下。

# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render_to_response # Create your views here. def homepage(request): return render_to_response('servermaterial/index.html')

開啟項目,進入index.html

  在項目下運行python manage.py runserver 8888,然后打開網站輸入網址:http://127.0.0.1:8888/server/home就可以顯示如圖4的網址了,其中的邏輯就不闡述了,網址中的server是我的app,home是app中的urls,它調用views中的渲染函數渲染這個頁面。

圖4 顯示網站

簡化資源

  如圖5,打開原始的資源中的index.html文件可以看到文件會帶有一個頁腳、網頁左側的導航和網頁上方的導航菜單和網頁獨有的內容,事實上你打開所有的如圖1的原始資源中的html文件都會有重復的部分,而本網頁的單獨內容寫在圖3的紅色框之內,即id='main-content'中的內容,其實這樣不利於網頁的擴展性。所以我們需要把模板簡化,於是我們把網站頁面共用的css,js資源以及導航欄、頁腳作為base.html,並將它保存在servermaterial下面取代原來所有的html文件(其它的html共用部分已經抽離在base.html中了,可以刪除掉,后面每個頁面單獨用到的組件再在原來的眾多html文件代碼中找)。

圖5 簡化前的html

  修改時,我們要考慮網站貼近自己的需求,有哪些功能需要寫在導航欄(配置、時間、重啟、日志等)里面,具體網頁做的功能需要從base.html中抽離出來,寫在id="main-content"中,其他的網頁只需要繼承這個base.html就可以了,改造后的base.html代碼如下:
  代碼中{% block title %}{{ title }}{% endblock %}、{% block log %}{{ title }}{% endblock %}給繼承base.html的網頁提供自己的標題。
  代碼中{% block username %}{% endblock %}給繼承base.html的網頁提供登陸人的名字。
  代碼中{% block othercss %}{% endblock %}給繼承base.html的網頁提供自己的CSS格式。
  代碼中{% block mainbody %}{% endblock %}給繼承base.html的網頁提供自己的具體網頁內容。
  代碼中{% block scripts %}{% endblock %}給繼承base.html的網頁提供自己的js文件。

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>{% block title %}{% endblock %}</title> <link rel="shortcut icon" href="/templates/favicon.ico"> <!-- Bootstrap core CSS --> <link href="/templates/servermaterial/assets/css/bootstrap.css" rel="stylesheet"> <!--external css--> <link href="/templates/servermaterial/assets/font-awesome/css/font-awesome.css" rel="stylesheet" /> <!-- Custom styles for this template --> <link href="/templates/servermaterial/assets/css/style.css" rel="stylesheet"> <link href="/templates/servermaterial/assets/css/style-responsive.css" rel="stylesheet"> <link href="/templates/servermaterial/assets/SweetAlert2/dist/sweetalert2.css" rel="stylesheet"> {% block othercss %}{% endblock %} </head> <body> <section id="container" > <!-- ********************************************************************************************************************************************************** TOP BAR CONTENT & NOTIFICATIONS *********************************************************************************************************************************************************** --> <!--header start--> <header class="header black-bg"> <div class="sidebar-toggle-box"> <div class="fa fa-bars tooltips" data-placement="right" data-original-title="Toggle Navigation"></div> </div> <!--logo start--> <a href="home.html" class="logo"><b>{% block log %}{% endblock %}</b></a> <!--logo end--> <div class="top-menu"> <ul class="nav pull-right top-menu"> <li><a class="logout" href="#">退出服務器</a></li> </ul> </div> </header> <!--header end--> <!-- ********************************************************************************************************************************************************** MAIN SIDEBAR MENU *********************************************************************************************************************************************************** --> <!--sidebar start--> <aside> <div id="sidebar" class="nav-collapse "> <!-- sidebar menu start--> <ul class="sidebar-menu" id="nav-accordion"> <p class="centered"><a href="home.html"><img src="/templates/servermaterial/assets/img/ui-sam.jpg" class="img-circle" width="60"></a></p> <h5 class="centered">{% block username %}{% endblock %},你好</h5> <li class="sub-menu"> <a href="servertime.html" > <i class="fa fa-calendar"></i> <span>服務器時間</span> </a> </li> <li class="sub-menu"> <a href="javascript:;" > <i class="fa fa-desktop"></i> <span>服務器日志</span> </a> <ul class="sub"> <li><a href="realtimelog.html">實時日志</a></li> <li><a href="log.html">回看日志</a></li> </ul> </li> <li class="sub-menu"> <a href="serverconfig.html" > <i class="fa fa-cogs"></i> <span>服務器配置</span> </a> </li> <li class="sub-menu"> <a href="reboot.html" > <i class="fa fa-refresh"></i> <span>進程重啟</span> </a> </li> <li class="sub-menu"> <a href="authority.html"> <i class="fa fa-user"></i> <span>權限管理</span> </a> </li> <li class="sub-menu"> <a href="help.html"> <i class="fa fa-book"></i> <span>使用說明</span> </a> </li> </ul> <!-- sidebar menu end--> </div> </aside> <!--sidebar end--> <!-- ********************************************************************************************************************************************************** MAIN CONTENT *********************************************************************************************************************************************************** --> <!--main content start--> <section id="main-content"> {% block mainbody %}{% endblock %} </section> <!--main content end--> <!--footer start--> <footer class="site-footer"> <div class="text-center"> 2018 - lishouxian </div> </footer> <!--footer end--> </section> <!-- js placed at the end of the document so the pages load faster --> <script src="/templates/servermaterial/assets/js/jquery.js"></script> <script src="/templates/servermaterial/assets/js/bootstrap.min.js"></script> <script class="include" type="text/javascript" src="/templates/servermaterial/assets/js/jquery.dcjqaccordion.2.7.js"></script> <script src="/templates/servermaterial/assets/js/jquery.scrollTo.min.js"></script> <script src="/templates/servermaterial/assets/js/jquery.nicescroll.js" type="text/javascript"></script> <!--common script for all pages--> <script src="/templates/servermaterial/assets/js/common-scripts.js"></script> <script src="/templates/servermaterial/assets/SweetAlert2/dist/sweetalert2.js"></script> {% block scripts %}{% endblock %} </body> </html>

  怎么繼承?在和base.html一個目錄下,即創建一個新的html文件,命名為home.html,該頁面作為進入server這個app之后的首頁。代碼如下:
其中{% extends "./base.html" %}是指繼承同目錄下的base.html文件。
  {% block othercss %}{% endblock %}中放home.html頁面需要用到的CSS文件。
  {% block title %}{{ title }}{% endblock %}、{% block log %}{{ title }}{% endblock %}兩個是home.html獨有的html內容,即兩個標題,可以通過server的views函數傳遞上來單獨設置。
  {% block username %}{{ username }}{% endblock %}也是home.html獨有的html內容,是用戶的名字,也是通過server的views函數傳遞上來單獨設置。
  {% block scripts %}{% endblock %}存放home頁面獨有的scripts。

{% extends "./base.html" %} {% block othercss %} <link rel="stylesheet" type="text/css" href="/templates/servermaterial/assets/js/gritter/css/jquery.gritter.css" /> {% endblock %} {% block title %}{{ title }}{% endblock %} {% block log %}{{ title }}{% endblock %} {% block username %}{{ username }}{% endblock %} {% block mainbody %} <section class="wrapper"> <h3><i class="fa fa-angle-right"></i> 主頁 <i class="fa fa-home"></i></h3> <div class="row mt"> <div class="col-lg-12"> <div class="content-panel"> <div style="width: 400px; height: 740px;"> <div class="col-lg-12"> <h3>歡迎使用</h3> </div> </div> </div> </div> </div> </section> {% endblock %} {% block scripts %} <script type="text/javascript" src="/templates/servermaterial/assets/js/gritter/js/jquery.gritter.js"></script> <script type="text/javascript" src="/templates/servermaterial/assets/js/gritter-conf.js"></script> <script type="text/javascript"> $(document).ready(function () { var unique_id = $.gritter.add({ title: '歡迎來到服務器!', text: '在這里,你可以修改時間、更改配置、查看日志等..~!', image: '/templates/servermaterial/assets/img/toolicon.png', sticky: true, time: '', class_name: 'my-sticky-class' }); return false; }); </script> {% endblock %}

  我們現在把這個home.html顯示出來,過程和上文中的簡單顯示內容中寫到的差不多,唯一區別是修改一下server中的views,給home.html傳遞一個title,修改一下資源的html文件,代碼如下:

# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render_to_response htmltitle = '服務器工具' def homepage(request): return render_to_response('servermaterial/home.html', {'title': htmltitle, 'username': 'username'})

  運行項目,可以看到如圖6,home.html顯示出來了,說明它繼承了base.html,並且擁有自己的內容(圖6中紅框中的內容),home.html中自己的css和js代碼是右上角的彈框(圖6中的藍框內容)。

圖6 顯示出來的home.html

  最后,同理,我們可以把所有的需要用到的頁面都這樣抽離出來作為一個單獨的html文件,圖7是我的網站用到的所有html文件,它們都繼承於base.html,在base.html的導航元素中設置好這些html的地址,並且在server中寫好這些模板對應的urls和views就可以做到跳轉和訪問了。

圖7 項目所有html文件

結語

  本篇文介紹了怎么投機的拿一個現有的bootstrap模板為己所用,並且通過繼承模板簡化資源。下一篇文章介紹python中的paramiko模塊,畢竟我們的Web小項目需要用到這個模塊去和服務器簡單交互。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM