劉濤 孫茜 易善凱
摘 要:針對目前智能課堂的研究,關于課程的管理系統(tǒng)就提出來了。因此,開發(fā)了一種基于Tornado和React技術的課程管理系統(tǒng)。通過Tornado框架作為后端框架,實現數據庫中數據的增、刪、改、查操作,Tornado與現在主流的Web服務器框架相比有著明顯的優(yōu)勢:它是非阻塞式服務器,而且速度相當快,這對于當下的Web開發(fā)來說至關重要。前端部分采用React技術將前臺表單中輸入的數據傳輸到后端數據庫中,并且對數據庫中的數據進行相應的操作,React的一切都是組件化的,使得代碼更加的模塊化,重用代碼將變得更加容易,可維護性極高。該系統(tǒng)的開發(fā)過程還徹底的實現了前后端分離,前后端的聯(lián)系僅靠API聯(lián)系起來,前端部分的開發(fā)引用了Mock-api這一虛擬的服務端接口完成前端部分開發(fā)。這一開發(fā)技術路線充分展現了Tornado和React對Web開發(fā)的優(yōu)勢所在,也可以提高這一系統(tǒng)的可維護性。
關鍵詞:Tornado;React;Mock-api;管理系統(tǒng)
中圖分類號:TP315 文獻標識碼:A
Abstract:In view of the current researches on intelligent classroom,the curriculum management system has been put forward.Therefore,a curriculum management system based on Tornado and React has been developed where Tornado framework is used as the back-end framework to realize the operation of adding,deleting and checking data in the database.Compared with the current mainstream Web server frameworks,Tornado has obvious advantages:it is a non-blocking server,and its speed is quite fast,which is very important for current Web development.The front-end part uses React technology to transfer the data input from the front-end forms to the back-end database,and carries on the corresponding operation of the data in the database.React is wholly component-based,which makes the codes more modularized,and makes the reuse of the codes easier and more maintainable.The development process of the system also completely realizes the separation of front and back ends.The connection between front and back ends only depends on API.The development of front-end part refers to Mock-api,a virtual server interface,to complete the separation of front and back ends.This development technology fully demonstrates the advantages of Tornado and React for Web development,and also improves the maintainability of this system.
Keywords:Tornado;React;Mock-api;management system
1 引言(Introduction)
如今,互聯(lián)網不僅大大方便了我們的日常生活,還提升了人與人之間的溝通效率,互聯(lián)網發(fā)展到現在,不得不與人工智能開始產生交集。人工智能平臺大多從互聯(lián)網企業(yè)轉型而來,因此可以說那互聯(lián)網AI化就是人工智能?;ヂ?lián)網的未來也一定是走向人工智能[1]。隨著教學改革的不斷進行,各個高校對教育管理系統(tǒng)的自動化需求也越來越大。學校應該充分利用計算機所帶來的技術來服務于高校,隨著最近幾年AI技術的快速進步,算法、算力和數據之間的進步,高校對教育管理系統(tǒng)對系統(tǒng)智能化的需要也越來越高?;赑ython的Tornado框架就很好的解決了C10K問題,大多數社交網絡會展示實時更新來提醒新消息、狀態(tài)變化和用戶通知,這要求客戶端始終有一個打開的連接等待來自服務器的任何響應。這就使得Apache的最大線程池會迅速的飽和。一旦線程池的資源耗盡,服務器將無法再響應新請求。異步服務器的應用也就提出來了,Tornado正是被設計來減輕基于線程的服務器的限制的,也就是說,如果當前請求正在等待來自其他資源的數據,則異步服務器可以顯式控制暫停請求[2]。隨著學校規(guī)模的擴大,學生人數逐漸增加;學校的課程也越來越多,課程管理也就變得尤為重要,因此智能課堂的完善需要這個課程管理系統(tǒng)來進一步實現。
2 Tornado技術介紹(Introduction of tornado technology)
Web開發(fā)人員可用的工具已經得到全面發(fā)展。隨著技術專家不斷突破極限并使Web應用程序無處不在,我們還必須升級我們的工具并不斷創(chuàng)建更好的框架以確保更好的應用程序。同時,我們也希望能夠使用新工具,以便我們可以編寫更清晰、可維護的代碼,這些代碼在部署到全球用戶時具有高度可擴展性。Tornado框架也就提出來了,Tornado是一個編寫易創(chuàng)建、擴展和部署的強大Web應用程序的絕佳選擇。它是一個用Python編寫的功能強大且可擴展的Web服務器。Tornado是FriendFeed網站的基礎,于2009年9月10日發(fā)布,目前不僅得到了許多社區(qū)的支持,而且被應用于各種不同的場合。除FriendFeed外,還有許多公司在生產上轉向Tornado,包括Quora、Turntable.fm、Bit.ly、Hipmunk和MyYearbook等。
當FriendFeed被FaceBook收購后得以開源。與那些只能達到10000個并發(fā)連接的傳統(tǒng)Web服務器不同,Tornado在設計時充分考慮了性能,該設計旨在解決C10K問題,使其成為一個非常高性能的框架。此外,它還具有處理安全性、用戶身份驗證、社交網絡和外部服務(如數據庫和用于異步交互的網站API)的工具[2]。
3 系統(tǒng)設計(System design)
3.1 系統(tǒng)技術支持
該系統(tǒng)的后端基于Tornado技術開發(fā),Tornado本身是一個功能強大且可擴展的Web服務器。不僅在處理高網絡流量時表現的足夠強大,而且在創(chuàng)建和編寫時表現得足夠的輕量級,還可以用于各種應用程序和工具。我們這里用Anaconda來運行基于python編寫的Tornado程序。Anaconda工具不僅在寫程序的時候對我們有很大幫助,在調式程序的時候也能起到很大的幫助,跟蹤調試能夠幫我們第一時間找出程序問題所在,可以根據報錯信息,對代碼就像修改。為了方便調試和使用,我們在測試的時候,服務器采用本機服務器,我們需要提前部署好服務器并指定端口號,也就http:localhost:8000,這里的8000指的是端口號,調試的時候端口可能會被占用,這里我們可以根據情況改成8001或者8002。前臺采用React技術并通過最基礎的CSS技術來對靜態(tài)頁面進行修飾。開發(fā)工具采用Sublime,能夠對輸入的React第一時間進行糾錯。同時,為了提高數據庫對數據的處理能力和可擴展性,數據庫我們選擇使用非關系型數據庫:MongoDB數據庫。
3.2 系統(tǒng)功能設計
課程管理系統(tǒng)整體結構圖如圖1所示。該系統(tǒng)由數據庫模塊,后端模塊和前端模塊組成。
后端模塊和前端模塊的主要功能是增加、刪除、更新和查詢課程管理系統(tǒng)中的課程?;赑ython的Toanado框架,使后端代碼足夠簡潔易懂,后端每完成一個方法的定義我們把這個方法封裝成一個API接口,然后把這個API接口提供給前端就可以了;前端部分,我們主要應用React技術,為了不去等待后端提供的API,影響開發(fā)效率,我們選擇使用Mock-api來模擬后端API接口,首先我們在Mock-api中創(chuàng)建一個數據庫,添加一條記錄,我們通過React技術把這條技術顯示到經過CSS修飾過的頁面當中,然后我們在頁面上已經創(chuàng)建好的輸入行中輸入相關課程信息,點擊“Create Course”即可將前臺輸入的數據存入后代數據庫中,并且在前臺頁面也能實時添加這條記錄,查看數據庫可以發(fā)現,我們插入數據的時候,數據庫系統(tǒng)會自動為這條記錄添加一個ObjectId字段,這是這條記錄的主鍵,這個主鍵使唯一的,這個字段也是索引和進行修改刪除操作的依據。每條數據的后面都有“Edit”和“Delete”按鈕,點擊“Edit”使數據變成可編輯狀態(tài),這個時候可以對數據庫里的數據進行修改,修改完成之后單擊“Update”以完成此數據的更新,此時后臺就是根據前臺提供的這個字段來進行索引任何更新數據。點擊“Delete”也可以刪除這條數據,根據前臺傳遞的ObjectID來索引,找到這條記錄然后刪除。另外還可以根據任一個字段的信息來查找這條課程記錄。課程列表頁面如圖2所示。
3.3 數據庫設計
目前關系型數據庫還是主流的數據庫,比如Mysql。根據快速發(fā)展的網站規(guī)模的要求,關系型數據庫需要滿足三個高要求:需要高度并發(fā)讀取和寫入數據庫,需要對大量數據進行高效存儲訪問,以及需要高度可擴展的數據庫高可用性。為了滿足這些需求,關系型數據庫采用的技術有分區(qū)、分表和分庫,但這需要修改業(yè)務邏輯層,這改變起來代價相當大。這個時候非關系型數據庫的優(yōu)勢就開始體現出來了,非關系型數據庫例如MongoDB就可以很好解決橫向擴展問題.因為MongoDB中的Collection沒有模式,所以不存在模式變更,由于Collection相互之間沒有約束關系,也不能執(zhí)行復雜的連接操作,所以MongoDB很容易支持分布式部署[3-6]。該系統(tǒng)后臺數據庫部分使用MongoDB數據庫,數據庫名稱為Course,Collection名稱為courses。該數據庫中有一個ObjectId字段是在插入數據的時候系統(tǒng)自動生成的,這個字段使唯一的。除了ObjectId,其余字段都可以為空。我們這里可以把任意一個字段作為索引依據,方便我們在搜索的時候可以依據每一個字段進行搜索,數據庫中的數據如圖3所示。
3.4 系統(tǒng)安全設計
Web應用程序中訪問控制機制中的漏洞,允許攻擊者未經授權能夠訪問其無權訪問的資源。Monshizadeh等人提出的MACR工具[7]基于多條路徑不一致的行為特征,能夠自動地檢測Web應用程序中的越權漏洞。Pellegrino等人[8]提出了一種新型的黑盒測試的方法。通過從用戶和Web應用程序交互的網絡記錄中識別Web軟件的行為模式,再加上一些常見的攻擊場景,生成測試樣例。使用這種方法成功地在商用Web應用程序中發(fā)現多個位置漏洞。Weissbacher等人[9]指出:瀏覽器中部分函數并不會受到同源策略(SOP)的限制,這就導致Web程序可能會因這些渠道而受到攻擊。
在安全方面,Tornado Web服務器在設計的初期就著重考慮到了,這也使得其能夠更容易的防范那些常見的漏洞。安全cookies可以防止用戶的本地狀態(tài)被瀏覽器中的惡意代碼暗中修改。此外,瀏覽器cookies可以與HTTP請求參數作比較來抵御跨站請求偽造攻擊。事實上,有很多種方式可以攔截瀏覽器中的cookies。JavaScript和Flash對于它們所執(zhí)行的頁面的域有讀寫cookies的權限。瀏覽器插件還可以用編程方法訪問這些數據,跨站腳本攻擊可以有效利用這些訪問從而修改訪客瀏覽器中的cookies的值。Tornado的安全cookies使用加密簽名的方式來驗證cookies的值是否已經被服務器軟件以外的任何人修改。由于任何惡意腳本都不知道正確的安全密鑰,因此它不能在應用完全不知情的情況下去任意修改cookies的值。然而,Tornado的安全cookies仍然容易被竊聽。惡意攻擊者可以通過腳本或瀏覽器插件截獲cookies的值,或者干脆直接竊聽未加密的網絡數據。記住cookies值是簽名的而不是加密的。惡意程序可以讀取已存儲的cookies,并可以將數據傳輸到任何一個服務器,或者通過發(fā)送沒有修改的數據給應用程序偽造一個請求。因此,避免將敏感的用戶數據存儲在瀏覽器cookies中非常重要。我們還需要注意是,用戶也有可能需要去修改他自己的cookies,在這個過程中也會導致遭受攻擊。例如,如果我們在cookies中存儲了用戶已付費的文章剩余的瀏覽數,我們希望阻止用戶自己去更新有關的數值來獲取免費的內容。Httponly和secure屬性就可以有效幫助我們防范這種攻擊。
3.5 系統(tǒng)流程
本系統(tǒng)以為智能課堂服務的目的,來設計滿足各種功能要求,使課程信息得以實時的更新,同時還保證了系統(tǒng)內部數據的信息安全。首先我們利用React技術搭建好最基本的前臺頁面和實現與在Mock-api中建立的數據庫的各種通信,對數據庫中的數據進行添加、刪除、修改和查詢等操作。在前后臺對接的時候,我們使用axios請求后臺API數據,進而對數據庫進行操作,tornado通過路由的形式把API提供給前臺,前臺在實現對數據庫中數據進行操作的同時也對頁面上顯示的數據進行實時的更新。同時了為了保證系統(tǒng)的安全性,我們優(yōu)化了前后臺代碼。從前臺React基本功能的實現,到使用axios請求后臺API數據,到后臺Tornado處理前臺傳入的數據,成功的實現了React和Tornado前后臺對接的課程管理系統(tǒng)。
4 系統(tǒng)測試(System test)
通過對該課程管理系統(tǒng)采用分步測試的方法,因為前后端使完全分離式進行開發(fā)的,我們在前臺進行前臺開發(fā)測試的時候,只需要滿足對頁面數據的更新和操作,而不需要對數據庫中的數據去定義各種方法,所以測試起來更加的方便和簡介。后端部分定義好接口之后能夠實現各個功能就夠了,在測試過程中分別對前后臺采取斷點跟蹤調試。對前臺進行測試的時候,我們根據每一個功能采用斷點跟蹤調試的方法對從前臺頁面中輸入的數據實時跟蹤。在后臺部分,我們從前臺接收到數據然后與數據庫之間進行交互也是一步步測試,通過多次測試,最終代碼完全沒有報錯,能夠成功實現前后臺對接的功能。保證了系統(tǒng)的正常使用需求。
5 結論(Conclusion)
通過這個課程管理系統(tǒng),使用Tornado和React框架滿足了系統(tǒng)大部分需求;考慮到數據的安全性需求,使用Tornado作為后臺代碼并充分利用Tornado框架自帶的一些安全機制,不僅保證了信息的安全性,而且代碼還足夠的輕量化。在高性能Web技術基礎之上,摒棄了關系型數據庫的種種約束,引進非關系型數據庫MongoDB集群和相適應的開發(fā)模型以保證系統(tǒng)的高性能、高可用性和高安全性。React創(chuàng)建的用戶交互界面相當友好且設計簡潔,當數據發(fā)生變化時,React可以做到高效地更新渲染界面,使得數據能夠實時的更新同步。當然對于MongoDB數據庫在這里的應用也有不足之處,對于一些需要連接起來的數據表使用MongoDB就不行了,再就是Tornado常被用作大型站點的接口服務框架,而不能像Django那樣著眼于建立完整的大型網站。關于根據任意字段進行搜索的功能也還有待進一步進行開發(fā)。頁面的完整性和觀賞性也有待提高。
參考文獻(References)
[1] 時宗勝.人工智能技術在移動互聯(lián)網中的應用研究[J].數字通信世界,2017(10):164.
[2] Michale Dory,Adam parrish,Brendam Berg.Introduction to Tornado[M].US, O'Reilly Media,2012.
[3] 潘 凡.從 My SQL 到 Mongo DB—視覺中國的NoSQL之路[J].程序員,2010(6):78-80.
[4] 盧冬海,何先波.淺析No SQL數據庫[J].中國西部科技,2011(2):14-16.
[5] 黃賢立.NoSQL非關系型數據庫的發(fā)展及應用初探[J].福建電腦,2010(7):30-32.
[6] 王光磊.MongoDB數據庫的應用研究和方案優(yōu)化[J].中國科技信息,2011(20):93-96.
[7] Monshizadeh M,Naldurg P,Venkatakrishnan VN.MACE:Detecting privilege escalation vulnerabilities in Web applications.In:Proc.of the 2014 ACM SIGSAC Conf.on Computer and Communications Security.ACM Press,2014:690-701.
[8] Pellegrino G,Balzarotti D.Toward black-box detection of logic flaws in Web applications.In:Bauer L,ed.Proc.of the 21st Annual Network and Distributed System Security Symp(NDSS 2014).San Diego:Internet Society,2014.
[9] Weissbacher M,Robertson W,Kirda E,et al.Zigzag:Automatically hardening Web applications against client-side validation vulnerabilities.In:Jung J,ed.Proc.of the 24th USENIX Security Symp.San Antonio:USENIX Association,2015:737-752.
作者簡介:
劉 濤(1995-),男,碩士生.研究領域:智能制造,人工智能.
孫 茜(1995-),男,碩士生.研究領域:智能制造,人工智能.
易善凱(1994-),男,碩士生.研究領域:智能制造,人工智能.