張臺,章杰,林培杰,賴云鋒
(福州大學 微納器件與太陽能電池研究所, 福州 350116)
?
基于Django的快件攬收服務器的開發(fā)與應用※*
張臺,章杰,林培杰,賴云鋒
(福州大學 微納器件與太陽能電池研究所, 福州 350116)
摘要:提出了一種基于Django的快件攬收服務器,該服務器通過快件的智能投遞和快件的統(tǒng)一收取來提高快件收發(fā)的效率。文中詳細描述了基于Django的快件攬收服務器的搭建和實現過程,為相關產品提供了一套很好的解決方案。對所設計的服務器進行模擬測試,其測試結果達到了設計目標。
關鍵詞:快件攬收服務器;Django;Python
引言
Django是基于Python語言的優(yōu)秀Web框架,該框架遵循MVC開發(fā)模式,內置多種Web開發(fā)組件,并集成了一個輕量級的Web服務器,使開發(fā)人員可以方便高效地對網絡應用進行開發(fā)和調試。本文利用Django技術的特點,快速開發(fā)了一個快件攬收服務器。這方面研究有助于加速智能快件箱發(fā)展的進程,具有較高的研究價值。
1服務器框架的建立
本文開發(fā)與實現的全過程都使用Python 2.7,因為本服務器的設計與實現需要借助數據庫功能,在Python2.5之后的版本中,都自帶有sqlite3數據庫引擎,無需下載和安裝相應的數據庫適配器,可以節(jié)省開發(fā)的時間。在開發(fā)環(huán)境搭建好后,即可開始快件攬收服務器的設計與開發(fā)。運行django-admin.py startproject mysite命令,在當前目錄下創(chuàng)建一個mysite目錄,該命令會在mysite目錄中產生一些.py文件,包括__init__.py、manage.py、settings.py、urls.py等。
__init__.py文件可以讓Python把該目錄當成一組模塊(即一個開發(fā)包)。manage.py是一種命令行工具,可以讓用戶以多種方式與該Django項目進行交互。settings.py文件可以對項目相關的工程模塊和數據庫全局配置信息進行設置。urls.py文件可以用來配置URL的地址映射和管理URL的地址格式,通過正則表達式來注冊站點信息。
本服務器要使用Django的數據庫層(模型),因此必須創(chuàng)建一個Django app。在上面創(chuàng)建好的mysite目錄下,執(zhí)行命令python manage.py startapp Express,該命令會在mysite目錄里創(chuàng)建一個Express目錄,目錄內包括admin.py、models.py、views.py等文件。在接下來的服務器的開發(fā)上,主要使用的是models.py及views.py。models.py是一個用python類來描述的數據表,可以通過python代碼來創(chuàng)建、修改、檢索數據庫中的記錄。視圖類文件views.py則用來編寫實現功能的邏輯代碼[3-4]。Django是一個典型的MVC模型框架,服務器體系結構如圖1所示。

圖1 快件攬收服務器體系結構
2服務器主要功能實現
為了提高快件投遞和收取的效率,本服務器提供了快件便捷投遞和統(tǒng)一收取的功能。用戶在服務器上的寄件流程為:首先,用戶通過連接網絡的設備登錄到服務器站點,初次使用的用戶可以在服務器上先注冊帳號,再進行登錄。其次,在服務器主界面中選擇寄件信息填寫功能,填寫完畢后,服務器會生成驗證碼。用戶記下驗證碼,回到主界面,選擇快件投遞功能后會提示用戶輸入驗證碼,用戶輸入正確的驗證碼后服務器會生成寄件信息文檔(快遞單),用戶可以對其進行打印,快遞單打印后用戶可以在服務器上選擇快件種類,完成整個寄件流程[5]。
同時,服務器在實現過程中還加入了意見反饋及視頻拍照的功能,當服務器出現故障或需改進時,意見反饋功能可以讓用戶及時聯(lián)系管理員,視頻拍照功能則能夠跟蹤用戶的圖像信息,提升服務器的安全性能。快遞管理人員(快遞員)在服務器上的收件流程很簡單,本服務器設置有管理員帳號,該帳號具有對所有快件統(tǒng)一攬收的權限,相關管理人員(快遞員)用該帳號登錄服務器并進入相應管理界面后,即可對所有快件進行統(tǒng)一收取。
2.1服務器用戶、組和權限
Django技術的一大優(yōu)勢在于具有完善的用戶管理機制及用戶權限系統(tǒng),可以讓管理者方便地進行用戶管理。Django站點自帶有用戶管理界面,當管理員用超級帳戶登錄后,點擊用戶鏈接可以進入用戶信息管理界面,在管理界面內可以查詢到服務器上所有普通用戶的信息,包括用戶名、密碼、電子郵箱、注冊時間及登錄時間等[6]。同時管理員可以對快件攬收服務器的所有注冊用戶的權限進行設置,包括:用戶登錄權限、用戶是否可以查看寄件信息、用戶是否能夠修改寄件信息、用戶是否能夠刪除寄件信息等。Django管理界面還具有添加組的功能,如果需要給大量用戶特定的權限,可以新建一個組,在組中添加特定的權限,并將所有需要這些權限的用戶分配到這個組里,通過這種方法可以節(jié)省管理者的時間。因此,基于Django技術的快件攬收服務器在用戶管理方面具有優(yōu)勢,管理者可以在服務器上激活普通用戶、取消某些有惡意表現用戶的登錄資格,以及賦予普通用戶一些必要操作的權限。
2.2登錄和寄件信息管理界面的設計與激活
管理界面是服務器中非常重要的一部分,它是以網頁和有限的可信任管理者為基礎的界面,它可以添加、編輯和刪除網站內容[7-8]。創(chuàng)建管理界面通常是千篇一律的,它必須認證用戶,顯示并管理表格,驗證輸入的有效性等;上述過程很繁瑣而且是重復勞動。本文所使用的Django在這方面做了較大的改進,可以用少量代碼來完成上述過程,因此,在Django中創(chuàng)建管理界面是非常方便的,這是Django技術的另一大優(yōu)勢[9]。本開發(fā)的首要任務是創(chuàng)建一個完善的寄件信息管理界面,過程如下:首先,在settings.py文件的INSTALLED_APPS配置中加入'django.contrib.admin',并保證INSTALLED_APPS中包含'django.contrib.auth'、'django.contrib.contenttypes'和'django.contrib.sessions',Django的管理工具需要這3個包。其次,默認情況下,命令django-admin.py startproject生成的文件urls.py是將Django admin的路徑注釋掉的,需要手動取消注釋。最后,運行 python manage.py syncdb命令生成管理界面使用的額外數據庫表。如果已經把'django.contrib.auth'包含進INSTALLED_APPS后,第一次運行syncdb命令時, 系統(tǒng)會讓開發(fā)者創(chuàng)建一個超級帳號,開發(fā)者也可以運行python manage.py createsuperuser命令來創(chuàng)建一個admin的超級帳號,否則將不能登錄服務器。

圖2 快件攬收服務器登錄頁面
快件攬收服務器的登錄頁面如圖2所示。為了防止用戶沒有登錄而直接訪問相應功能網站的URL,需要在views.py文件的開頭引入代碼from django.contrib.auth.decorators import login_required。在相應的視圖函數的前面添加@login_required標簽,并在settings.py中配置LOGIN_URL參數(即登錄的URL),加入代碼LOGIN_URL = '/admin/'。同時修改mysite目錄下的urls.py文件,確保文件下代碼url(r'^admin/', include(admin.site.urls))的有效性。上述過程完成后,用戶就可以正常登錄服務器并且使用服務器后續(xù)的各項功能。
本服務器開發(fā)中,用戶的寄件信息包括姓名、地址、電話、驗證碼及投遞時間。通過修改models.py文件來激活寄件信息管理界面,實現對用戶寄件信息的管理。在models.py中每個數據模型都是django.db.models.Model的子類,本服務器只需一個寄件信息的數據模型,這個數據模型相當于單個數據庫表,姓名、地址、電話、驗證碼等屬性是這個表中的一個個字段。例如,要添加姓名這一字段,它的語法就是在class Express(models.Model)下添加name = models.CharField(max_length=30)。在定義完所有字段后,運行命令python manage.py validate校驗模型的有效性,如果沒有錯誤發(fā)生,再運行命令python manage.py sqlall Express即可生成數據庫表。在models.py的Express模塊最后加上class Admin,并且在admin.py文件中加入admin.site.register(Express),即可激活服務器的寄件信息管理功能。
在完成服務器管理界面激活及數據庫表生成后,還需對數據庫進行配置。Django的數據庫配置需要在Django的默認配置文件settings.py中完成。在settings.py文件中找到DATABASES配置項,在該配置項中進行如下設置:“ENGINE': 'django.db.backends.sqlite3”,它告知Django在這次開發(fā)中使用的數據庫為sqlite3;'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),它將數據庫的名稱告知Django并對數據庫文件指定完整的文件系統(tǒng)路徑。在權限設置方面,服務器上的所有寄件信息只有超級帳戶能夠查詢,管理者用超級帳戶登錄后,在管理界面中可以瀏覽所有寄件信息和使用快件統(tǒng)一收取的功能,寄件信息管理頁面如圖3所示。

圖3 寄件信息管理頁面
2.3寄件信息的輸入及驗證碼的生成
普通用戶登錄后,會出現如圖4所示的頁面,它是普通用戶登錄服務器后出現的主界面,主要功能有寄件信息的填寫、快件的投遞、寄件信息的查詢及意見反饋等。

圖4 快件攬收服務器主界面
在主界面選擇輸入寄件信息選項后,會進入寄件信息填寫的頁面,填寫完后的頁面略——編者注。為了區(qū)分該服務器上的所有寄件人,本服務器具有驗證碼生成功能,用戶在服務器上填寫寄件信息后,服務器會生成不同的驗證碼以區(qū)分不同的寄件信息,驗證碼生成的視圖函數在views.py文件中編寫,該函數不僅要實現生成驗證碼的功能,并且要將生成的驗證碼和寄件信息對應起來存入服務器的數據庫中。存入數據庫的信息只有服務器管理員(快遞員)用管理帳號登錄后才能查詢。
2.4寄件信息文本的打印及快件種類的選擇
接下來服務器開發(fā)的主要工作就是用驗證碼來抓取寄件信息并生成文本文檔,即快遞單。快遞單文檔默認在mysite目錄下生成,也可以自行設置文檔生成的路徑。該文檔可以在服務器上打開,因此,在電腦或其他可部署Django服務器的設備上連接打印機即可實現寄件流程中快遞單打印部分的功能。該部分的代碼在views.py文件中編寫,在相應視圖函數中使用results=Express.objects.filter(qset).distinct(),將驗證碼對應的寄件信息存入results中,再使用f=open('express.doc','w') 及f.write(str(results))將寄件信息寫入生成的word文檔中,寄件信息文檔名為express.doc。最后,在views.py文件開頭引入webbrowser控件類,使用webbrowser.open()函數可在瀏覽器上直接打開文檔并打印。
本服務器將快件分為兩類:紙質信件及包裹信件。為了模擬快件投遞及快件種類選擇功能,服務器實現過程中在views.py視圖文件中加入了Python編寫的控制3道門開關及控制傳輸帶運轉的視圖函數。這3道門包括主門及2道分別存放兩類快件的箱門,用戶選擇快件投遞選項后,主門打開,存放兩類快件的箱門關閉,這樣可以保證所有用戶快件的安全;在用戶投入快件并選擇好快件種類后,主門關閉,存放相應種類快件的箱門打開,通過傳輸帶來輸送快件到相應的箱門后。
在前面所述的寄件信息管理頁面中,有快件統(tǒng)一收取的功能選項,管理人員(快遞員)通過該選項可以同時打開3道門來實現快件的統(tǒng)一攬收。本服務器在實現過程中,借助的主要測試硬件為樹莓派。首先要將模擬門開關、步進電機及驅動板與樹莓派的GPIO正確連接,然后在views.py中用import RPi.GPIO as GPIO引入GPIO庫,并通過setmode、setup、output等庫函數來對樹莓派各GPIO口進行控制。最后,在html文件中,把頁面的功能選項和編寫的相關視圖函數聯(lián)系起來。完成上述關鍵步驟后,用戶即可通過網頁來控制“樹莓派B+”上的GPIO,實現快件種類選擇及快件投遞的功能,服務器頁面略——編者注,上述過程中使用的相關Python程序僅適用于樹莓派系列的開發(fā)板。
2.5視頻拍照功能的實現
在寄件流程的打印環(huán)節(jié),可以加入視頻拍照的功能,在用戶按下打印功能按鈕后,通過攝像頭捕捉屏幕中出現的人臉,在成功捕捉到人臉后,通過攝像頭進行拍照保存。這項功能通過在Python中使用SimpleCV庫的函數findHaarFeatures來實現,這是一個在圖像中搜索匹配某一特定模式的算法[10]。在SimpleCV庫中自帶了一些模式,如臉、鼻子、眼睛、身體等,開發(fā)者也可以下載或生成自己的模式文件。findHaarFeature可以分析攝像頭捕捉到的圖像,并從圖像中匹配出對應的模式,然后返回匹配的部分在圖像中的位置,例如,使用這個函數可以匹配圖像中出現的汽車、動物或人。
視頻拍照的實現代碼在views.py中編寫,用findHaarFeatures函數實現人臉識別的功能。首先,利用SimpleCV庫中的Camera函數設置圖像尺寸;其次,通過循環(huán)語句不斷執(zhí)行faces=frame.findHaarFeatures('face')來捕捉用戶在使用服務器打印功能時的圖像,只有當攝像頭捕捉到人臉后,通過print函數打印str(face.coordinates())即可在終端顯示人臉的坐標;最后,執(zhí)行frame.save()就可將檢測到的人臉圖像保存,圖像的存放路徑可由開發(fā)者指定。圖像保存后,用戶才能繼續(xù)使用寄件流程的后續(xù)功能,如果攝像頭沒有捕捉到人臉,將不能使用寄件流程中的后續(xù)功能。通過視頻拍照,管理員就可以跟蹤到每一位寄件用戶的圖像信息,提高服務器的安全性能。該部分功能依舊可以在“樹莓派B+”上進行測試,在樹莓派上連接好USB攝像頭后,測試結果如圖5所示。

圖5 人臉捕捉并保存用戶圖像
3服務器主要功能測試
本服務器的測試可以通過將其部署到“樹莓派B+”開發(fā)板上進行。“樹莓派B+”是一臺信用卡大小、基于Linux的卡片式電腦(Single-board Computer,單板機),它配備了一顆ARM11,主頻為700 MHz的CPU,以SD卡為內存硬盤,卡片主板周圍有兩個USB接口和一個網口并配有40個GPIO口[11],因此,可以連接繼電器、打印機、步進電機、顯示屏、USB攝像頭、鍵盤等外設來模擬寄件信息的輸入、快遞單的打印、快遞箱門的開關、視頻拍照、快件種類的選擇及快件在箱門后的輸送[12]。
在實際的測試操作中,服務器在“樹莓派B+”上工作狀態(tài)良好,能夠實現文中所述的快件攬收服務器的所有功能,完成整個流程后服務器會彈出結束頁面。因此,可將本服務器部署到一些相關的設備(如智能快件箱)上工作,可以提高快件投遞及快件收取的效率,具有不錯的實用性。
結語
本文設計的快件攬收服務器是基于Django技術進行開發(fā)和實現的,主要針對2種用戶類別:寄件人和快遞管理人員。為了測試服務器的實用性,通過將服務器部署到“樹莓派B+”上進行模擬測試,成功模擬了用戶寄件及快遞員統(tǒng)一取件的全部流程,實現了開發(fā)的目標。該服務器可以幫助寄件人和快遞從業(yè)人員減輕負擔,在一定程度上提高了快遞收發(fā)的效率,在快遞行業(yè)競爭白熱化的今天,希望這項研究可以為相關行業(yè)的發(fā)展提出一些參考。

參考文獻
[1] 武超.快遞業(yè)的現狀與對策[J].科學與財富,2013(2):184-185.
[2] 洪厚興.“黑馬”智能快件箱[J].運輸經理世界, 2014(2):22-25.
[3] 葉鋒.通過Python語言實現郵件收發(fā)[J].電腦編程技巧與維護,2014(7):71-72.
[4] 王冉陽.基于Django和Python的Web開發(fā)[J].電腦編程技巧與維護,2009(2):56-58.
[5] 王學斌,耿艷,焦錚,等.智能快件箱應用研究[C]//交通運輸部專家委員會2013年會論文集,2013:147-155.
[6] 劉班.在Django下實現用戶的安全注冊和登錄[J].電腦編程技巧與維護,2012(9):82-90.
[7] 楊志慶.基于Django的Blog系統(tǒng)的開發(fā)與實現[J].機電一體化,2013,19(9):69-72.
[8] 劉班.利用Django快速構建信息發(fā)布系統(tǒng)[J].電腦編程技巧與維護,2011(9):55-61.
[9] 馬潔.Django技術在軟件開發(fā)中的應用[J].湖南農機,2013,40(3):84,86.
[10] Nathan Oostendorp,Anthony Oliver,Katherine Scott.Practical Computer Vision with SimpleCV[M].California:O'Reilly Media, 2012.
[11] Matt Richardson,Shawn Wallace.Getting Started with Raspberry Pi[M].California:O'Reilly Media,2012.
[12] 李文勝.基于樹莓派的嵌入式Linux開發(fā)教學探索[J].電子技術與軟件工程,2014(9).
張臺(碩士研究生),主要研究方向為嵌入式系統(tǒng)應用。
Development and Application of Express Transceiver Server Based on Django※
Zhang Tai,Zhang Jie,Lin Peijie,Lai Yunfeng
(Institute of Micro-Nano Devices&Solar Cells,Fuzhou University,Fuzhou 350116,China)
Abstract:A Django-based express transceiver server is proposed,that is able to improve the efficiency through the intelligent delivery and collection functions.In the paper,the construction and implementation process of the express transceiver server are described,which provides a good solution for the related products.The simulation results indicate that the design scheme can fulfill the design target.
Key words:express transceiver server;Django;Python
收稿日期:(責任編輯:楊迪娜2015-08-22)
中圖分類號:TP368.5
文獻標識碼:A
* 基金項目:福建省教育廳省屬高校科研專項(項目編號:JK2014003)。