張怡 趙易 符浩 馮海 林森
關(guān)鍵詞:Django;ORM;Python;數(shù)據(jù)庫;制絲車間
0 引言
制絲車間維修備件是設(shè)備維護與保證設(shè)備正常連續(xù)工作的一個重要后備力量,并且人工統(tǒng)計的方式經(jīng)常會出現(xiàn)信息偏差、數(shù)據(jù)維護困難、工作效率低下等問題。同時為了了解備件庫存情況,需要進行定期盤查,費時費力且容易出錯。由于對庫存情況不能做到實時準(zhǔn)確的了解導(dǎo)致需求信息不能及時傳遞給公司的采購部門有時就會造成因為缺少備件而維修困難的問題,增加維修時長,影響設(shè)備生產(chǎn)的連續(xù)性,所以備件信息化管理需求越來越迫切。隨著信息技術(shù)的發(fā)展,已經(jīng)有很多倉儲系統(tǒng)成功開發(fā)的案例,如:林楊的基于Java EE的倉庫管理系統(tǒng)[1];黃垚設(shè)計并開發(fā)出一種Java、Spring 與數(shù)據(jù)庫結(jié)合的倉庫管理系統(tǒng)[2];吳凡開發(fā)了一種應(yīng)用RFID感應(yīng)技術(shù)物聯(lián)網(wǎng)和計算機系統(tǒng)相結(jié)合的智能倉庫管理系統(tǒng)[3]。案例中可以看出倉儲管理系統(tǒng)可以應(yīng)用數(shù)據(jù)庫實現(xiàn)信息的增加、刪除、更改等功能。為了實現(xiàn)維修備件倉庫的入庫、出庫、查詢、實時庫存等具有信息化智能化的制絲車間備件管理平臺,本文基于Djongo與數(shù)據(jù)庫開發(fā)了一套制絲車間備件管理系統(tǒng)。
1 應(yīng)用技術(shù)
Python語言的語法簡潔而清晰,具有豐富和強大的類庫,常被稱為膠水語言[4]。并且Python語言是高級語言且具有簡單、開源、可以移植性、可擴展性、可嵌入性的特性以及具有豐富的類庫的特點,本文運用Python語言進行開發(fā)[5]。
1.1 數(shù)據(jù)庫
數(shù)據(jù)庫就是一種信息存儲工具,而計算機數(shù)據(jù)庫技術(shù)是管理信息數(shù)據(jù)時所常用的一種便捷高效的手段之一。常見的數(shù)據(jù)庫有MySQL、Oracle、SQL Server、MongoDB、Memcache、HBase等,其中MySQL具有易使用、開源性、接口豐富、開發(fā)成本低等優(yōu)點[6],因此本文采用和MySQL作為后臺數(shù)據(jù)庫類型。
1.2 訪問數(shù)據(jù)庫方式
在Python系統(tǒng)中訪問數(shù)據(jù)庫一般有如圖1所示的兩種方式。一種是直接連接的,另外一種則是基于Django通過ORM訪問進行操作。
1.3 Django
Django是基于Python語言的一種開源網(wǎng)絡(luò)框架,采用MTV模型即Model-Template-View將業(yè)務(wù)邏輯、表示邏輯以及數(shù)據(jù)庫定義三者在應(yīng)用開發(fā)過程中完全分離[7]。Model層功能塊通過ORM對數(shù)據(jù)進行處理封裝;Views層功能是展現(xiàn)數(shù)據(jù),實現(xiàn)業(yè)務(wù)邏輯,是模型之間聯(lián)系的紐帶;Templates層功能是方式和效果的呈現(xiàn)。
1.4 ORM
ORM(Object Relational Mapping)即對象關(guān)系映射的概念,它可以基于Django對各種數(shù)據(jù)類型進行封裝并連接入庫得到一個數(shù)據(jù)庫API[8]。通過這一操作業(yè)務(wù)邏輯層可以對數(shù)據(jù)庫進行各種操作。
1.5 數(shù)據(jù)庫連接選擇
直接訪問的操作流程邏輯復(fù)雜、重復(fù)度高,并存在注入攻擊等安全風(fēng)險問題,業(yè)務(wù)與數(shù)據(jù)邏輯分離困難。并且當(dāng)需要改變遷移數(shù)據(jù)庫類型時,在系統(tǒng)中直接寫原生SQL會造成非常大的變更成本。
利用ORM間接訪問的方式與直接訪問的方式相比簡化了訪問方式、減少代碼的重復(fù)性、實現(xiàn)分層模式和提高安全特性的優(yōu)點。并且它又擁有統(tǒng)一的訪問接口可以實現(xiàn)通用數(shù)據(jù)庫交互避免,避免了不同數(shù)據(jù)庫原生SQL語言不同的問題[9]。
因此,選擇基于Django通過ORM訪問數(shù)據(jù)庫的方式進行系統(tǒng)開發(fā)。
2 需求分析
2.1 需求分析
對系統(tǒng)的需求分析是開發(fā)的第一步,也是決定系統(tǒng)性能和最終功能的最重要的步驟。首先需要明確想要實現(xiàn)的功能需求,并且對這些需求的可行性、性能和功能等方面進行具體的分析。通過分析確定合理需求,排除不合理需求,提升開發(fā)效率縮短開發(fā)時間。經(jīng)過分析與討論,本系統(tǒng)的主要功能是對備件信息的查詢。
2.2 功能需求
功能需求是在實現(xiàn)主需求條件下各項子功能的具體要求具體有:
1)用戶可以查詢通過關(guān)鍵字搜索到自己想要的備件信息,包括物料號、物料名稱、庫存和備件具體位置。
2)用戶可以在查到備件信息后對所需備件進行出入庫與刪除功能。
3)用戶可以添加倉庫內(nèi)不存在的備件信息即“庫存新增”功能。
4)用戶可以對出入庫操作記錄進行查詢。
5)擁有用戶權(quán)限:當(dāng)用戶登錄時可以對備件信息進行操作,如果沒有登錄則只能進行信息查詢,進行增刪改等功能時會直接跳轉(zhuǎn)到登錄頁面。
3 軟件設(shè)計
在Python中可以直接創(chuàng)建Django模塊,之后會自動生成基于Django的各種子功能程序文件,其主要文件的功能如下:
1)setting.py:對數(shù)據(jù)庫進行配置。
2)models.py:實現(xiàn)對數(shù)據(jù)操作配置。
3)migrations.py:對數(shù)據(jù)庫的變更進行記錄。
4)views.py:功能進行操作,實現(xiàn)用戶請求。
5)urls.py:配置函數(shù)。
3.1 連接數(shù)據(jù)庫
3.2 數(shù)據(jù)庫操作設(shè)置
在model.py中生成兩個數(shù)據(jù)模型分別為庫存列表和出入庫記錄。
3.3 視圖及其功能
功能的實現(xiàn)通過在主頁面進行請求,在url.py中的render函數(shù)對應(yīng)過來,render函數(shù)內(nèi)部讀取含有語法模板的HTML文件進行內(nèi)部渲染其中模板語法執(zhí)行并替換數(shù)據(jù),最終得到的是只包含HTML標(biāo)簽的字符串。最后將渲染完成的字符串返回給用戶瀏覽器。用以實現(xiàn)各種功能。
4 實現(xiàn)
該系統(tǒng)主要實現(xiàn)了頁面布局,查詢模塊,用戶登錄,用戶授權(quán),操作記錄等功能。具體實現(xiàn)如下:當(dāng)進入系統(tǒng)頁面后,首先彈出系統(tǒng)首頁如圖2所示,可在標(biāo)頭欄找到自己想要進行的操作(具體有:維修組備件管理系統(tǒng)、庫存查詢和出入庫記錄),對備件進行查詢時不需要登錄,只需要在搜索欄找到自己需要找到的備件,點擊查詢即可,如圖3所示。
當(dāng)需要對備件進行出入庫以及刪除操作時,如沒有登錄,當(dāng)點擊操作按鈕時則自動跳轉(zhuǎn)登錄界面如圖4所示,如已經(jīng)登錄則繼續(xù)操作,如圖5(a)、圖5(b)所示分別為出庫操作頁面、入庫操作頁面,刪除功能需要登錄特定賬號進行,操作只需點擊刪除按鈕即可。
當(dāng)備件入庫時,先對備件進行查詢,如在數(shù)據(jù)庫中查詢不到此備件,則需要對其進行備件新增,其頁面如圖6所示。
當(dāng)想要查詢歷史操作時,點擊標(biāo)題欄(出入庫記錄)即可,如沒有登錄該系統(tǒng)頁面顯示為空,登錄后可以對出入庫歷史記錄進行查詢,如圖7(a)、圖7(b)所示分別為出庫、入庫紀(jì)錄查詢,查詢后可看到操作類型、時間、用戶名等信息。
5 結(jié)束語
本文基于Django的ORM框架,結(jié)合MySQL數(shù)據(jù)庫設(shè)計了一個制絲車間備件管理系統(tǒng)。該系統(tǒng)解決了備件重復(fù)整理的時間,縮短了維修時備件查找的時間,提高了維修效率保證了車間設(shè)備的持續(xù)生產(chǎn)。當(dāng)有新的備件需要入庫時,不再需要在表格中查找標(biāo)記,核對備件數(shù)量并重新紀(jì)錄,縮短了工作時間,防止記錄出錯。同時該系統(tǒng)還可以讓維修工對備件庫存有實時的掌握,以便對備件進行及時采購與更新。