【NetDevops】網絡自動化運維--1獲取用戶基本信息

 版權聲明:本文爲博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處連接和本聲明。 
以前博客的雲主機到期了沒續費,被刪啦[NetDevops]網絡自動化運維--1獲取用戶基本信息最重要的是沒有備份!此處省略幾個字。。。。。
       從這篇文章開始個人博客便開啓了新的分類:NetDevops,但願在這裏記錄並分享我與網絡及網絡安全自動化運維平臺的故事。原則是:有時間多擼代碼,按期經過博客總結[NetDevops]網絡自動化運維--1獲取用戶基本信息[NetDevops]網絡自動化運維--1獲取用戶基本信息[NetDevops]網絡自動化運維--1獲取用戶基本信息[NetDevops]網絡自動化運維--1獲取用戶基本信息[NetDevops]網絡自動化運維--1獲取用戶基本信息
本文主要記錄經過Python實現獲取用戶基本信息(IP地址、客戶端angent等信息),搞這個功能我是這樣想的:運維平臺的使用者主要有管理員、運維人員、普通用戶,每當有用戶登陸或訪問平臺時咱們記錄該用戶的基本信息並保存至數據庫。或許未來咱們針對本身的平臺作審計功能時會用到這些數據。
言歸正傳,本次開發環境爲:Python 3.7.4 、Django 2.2.四、Mysql 8.0.1五、Docker 18.09.2 ;編譯工具使用Pycharm;操做環境爲Debian 4.19.0-kali5-amd6四、VMware® Workstation 15 Pro
1、咱們建立名爲NetDevOps的Django工程
能夠經過Pycharm建立也能夠在終端經過命令建立,習慣CLI界面的我固然使用命令建立了[NetDevops]網絡自動化運維--1獲取用戶基本信息命令以下:
  a.django-admin startproject NetDevops       #建立工程
   b.python manage.py startapp Users       #建立APP(需切換到工程目錄下)
 
2、修改settings文件(鏈接數據庫)
a.找見settings文件中有關DATABASES的配置,並將默認的鏈接方式sqllite3替換爲mysql
 1 DATABASES = {
 2 'default': {
 3 'ENGINE': 'django.db.backends.mysql',
 4 'NAME': 'netdevops',
 5 'USER': 'forgeek',
 6 'PASSWORD': 'xxxxxx',
 7 'HOST': '172.16.127.128',
 8 'PORT': '3306',
 9 'OPTIONS': {},
10 'init_command': 'SET storage_engine=INNODB,'
11 'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED, autocommit=1, names "utf8";',
12 }
13 }
View Code

 

b.修改init文件
  Python3中沒法經過pip直接安裝mysqlclient,因此咱們使用pymysql來代替它。經過pip安裝好pymysql後咱們要修改MySQLdb()的引擎,咱們僅須要修改工程目錄下init.py文件便可,添加以下代碼:
  import pymysql
  pymysql.install_as_MySQLdb()
3、簡單介紹一下本功能模型原理
用戶經過瀏覽器輸入地址訪問平臺--->urls路由轉發--->接口獲取信息--->view視圖--->數據庫--->view視圖經過Httpresponse給瀏覽器
 
4、開始擼代碼:
  • Mysql配置
# 建立mysql賬號(這裏的賬號信息要與settings配置文件中鏈接數據庫的配置信息保持一致)
mysql> alter user 'forgeek'@'%' identified with mysql_native_password by 'xxxx';
# 設置forgeek賬號密碼永不過時
mysql> alter user 'forgeek'@'%' identified by 'xxxx' password expire never;
# 受權(這裏因爲測試環境我這邊分配權限比較大,你們能夠根據本身狀況設置)
grant all privileges on *.* to 'forgeek'@'%';
# 刷新權限
mysql> flush privileges;
# 驗證用戶的建立是否成功
mysql>  select host,user,authentication_string from mysql.user;
# 建立名爲netdevops的數據庫
mysql> create database netdevops;
  • models模型類
      在咱們建立的Users這個app中有個models.py文件,在Django中model是你數據的單1、明確的信息來源。它包含了你存儲的數據的重要字段和行爲。一般,一個模型(model)映射到一個數據庫表

定義簡介:python

  • 每一個模型都是一個python類,它是django.db.models.Model的子類
  • 模型的每一個屬性都表明一個數據庫字段
  • 綜上所述,Django爲您提供了一個自動生成的數據庫訪問API,詳細見官方文檔

model與數據庫結構對應關係圖以下:mysql

[NetDevops]網絡自動化運維--1獲取用戶基本信息

  這個小功能中咱們須要創建兩張表,一個保存用戶信息另外一個保存瀏覽器信息。考慮到一個用戶可能會有多個瀏覽器,所以須要創建一個一對多的關係。我這裏直接貼源碼好了,有不懂的直接留言好了。web

 1 # coding=utf-8
 2 from django.db import models
 3 
 4 
 5 class UserIpInfo(models.Model):
 6     ip = models.CharField(max_length=40, default='', verbose_name=u'IP地址', null=True)
 7     time = models.DateTimeField(verbose_name=u'更新時間', auto_now=True)
 8 
 9     class Meta:
10         verbose_name = u"用戶訪問IP地址表"
11         verbose_name_plural = verbose_name
12         db_table = "useripinfo"
13 
14 
15 class BrowseInfo(models.Model):
16     useragent = models.CharField(max_length=200, default='', verbose_name=u'用戶瀏覽器信息', null=True)
17     models.CharField(max_length=256, verbose_name=u'設備惟一ID', default='')
18     user_ip = models.ForeignKey("UserIpInfo", on_delete=models.CASCADE)
19 
20     class Meta:
21         verbose_name = u"用戶瀏覽器信息表"
22         verbose_name_plural = verbose_name
23         db_table = "browseinfo"
View Code

 

  • views視圖
  Django 的視圖層,主要是負責處理用戶的請求並返回響應。視圖函數只是一個Python函數,它接受Web請求並返回Web響應。此響應能夠是網頁的HTML內容,重定向,404錯誤,XML文檔或圖像或者其餘什麼。視圖自己包含返回該響應所需的任意邏輯。只要在Python路徑上,此代碼就能夠存在於您想要的任何地方。沒有其餘要求 - 沒有「魔術」,能夠這麼說。爲了將代碼放在某處,慣例是將視圖放在名爲views.py的文件中,放在項目或應用程序目錄中。
這裏一樣,我將整個源碼貼出來。有問題就留言吧
 1 # from django.shortcuts import render
 2 from django.http import HttpResponse
 3 from .models import *
 4 import json
 5 
 6 
 7 def user_ip_info(request):
 8 # print('-----------------test/n', request.META)
 9 ip_addr = request.META['REMOTE_ADDR']
10 user_ua = request.META['HTTP_USER_AGENT']
11 print(len(user_ua))
12 
13 user_obj = UserIpInfo.objects.filter(ip=ip_addr)
14 if not user_obj:
15 res = UserIpInfo.objects.create(ip=ip_addr)
16 ip_addr_id = res.id
17 else:
18 ip_addr_id = user_obj[0].id
19 
20 BrowseInfo.objects.create(useragent=user_ua, user_ip=UserIpInfo.objects.get(id=ip_addr_id))
21 
22 result = {
23 "狀態": "Success!",
24 "信息": "User info",
25 "IP": ip_addr,
26 "瀏覽器": user_ua
27 }
28 
29 return HttpResponse(json.dumps(result), content_type="application/json", charset="utf-8")
30 
31 
32 def user_infos(request):
33 ip_list = UserIpInfo.objects.all()
34 infos = {}
35 for item in ip_list:
36 infos[item.ip] = [b_obj.useragent for b_obj in BrowseInfo.objects.filter(user_ip_id=item.id)]
37 
38 result = {"狀態": "Success!", "信息": infos}
39 
40 return HttpResponse(json.dumps(result), content_type="application/json", charset="utf-8")
View Code

 



  • urls路由轉發
  對於高質量的Web 應用來講,使用簡潔、優雅的URL 模式是一個很是值得重視的細節。Django 容許你自由地設計你的URL,不受框架束縛。
爲了給一個應用設計URL,你須要建立一個Python 模塊,一般被稱爲**URLconf**(URL configuration)。這個模塊是純粹的Python 代碼,包含URL 模式(簡單的正則表達式)到Python 函數(你的視圖)的簡單映射。映射可短可長,隨便你。它能夠引用其它的映射。並且,由於它是純粹的Python 代碼,它能夠動態構造。
  Django 還提供根據當前語言翻譯URL 的一種方法。更多信息參見 國際化文檔

----------------該段落引用官方文檔-------------------(https://docs.djangoproject.com/zh-hans/2.2/topics/http/urls/

 
我這裏仍是一樣直接貼出源碼,有問題留言便可。
 1 NetDevops項目中urls.py
1 from django.urls import path
2 from . import views
3 
4 urlpatterns = [
5 path('send/', views.user_ip_info),
6 path('get/', views.user_infos),
7 
8 ]
View Code


二、User 應用中urls.py:
1 from django.urls import path
2 from . import views
3 
4 urlpatterns = [
5 path('send/', views.user_ip_info),
6 path('get/', views.user_infos),
7 
8 ]
View Code

 



  因爲我這裏是經過JSON格式反饋到瀏覽器,因此沒有些特殊的HTML文件,等後期其餘功能再來完善本次項目的模板。
下面是這個功能的目錄結構:
 
打開終端咱們經過命令:
一、生成遷移文件: python3 manage.py makemigrations
二、進行遷移:python3 manage.py migrate
三、打開Djang自帶調試web服務端:python3 manage.py runserver 0.0.0.0:80
 
最後就是打開瀏覽器測試了,前提是要確保你的和整個工程是鏈接好的。
相關文章
相關標籤/搜索