999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于B/S架構的競賽管理系統設計

2019-05-22 11:18:06趙美勇楊永琪宋思睿
電腦知識與技術 2019年10期

趙美勇 楊永琪 宋思睿

摘要:利用B/S構架設計系統,省去了客戶端的設計,擴大了應用范圍,除了計算機以外的其他終端都可以訪問。使用Python進行Web開發,使用其中的Flask框架來進行輕量級的Web應用開發,數據庫方面則選的其內部的Flask-SQLAlchemy來進行管理SQLite(Unix),簡化了整個SQLAlchemy操作。使整個系統輕便高效。

關鍵詞:B/S架構;Flask框架;Python;Web開發

中圖分類號:TP393 文獻標識碼:A

文章編號:1009-3044(2019)10-0086-03

開放科學(資源服務)標識碼(OSID):

1 系統開發平臺

1.1 開發平臺簡介

本競賽管理系統采用B/S架構,使用Python進行Web開發。渲染界面采用Jinja2模板引擎,同時使用Flask-Bootstrap集成TwitterBootstrap。

利用Flask-Login管理已登錄用戶的用戶會話,使用Werkzeug計算密碼散列值并進行核對,通過itsdangerous生成并核對加密安全令牌。

選擇使用的數據庫框架Flask-SQLAlchem管理數據庫,數據庫引擎選用SQLite。

1.2 開發語言

Python-Flask

使用Python Web開發Flask框架,Flask被設計為可拓展的框架,具有一個包含基本服務的強健核心,其他功能通過拓展實現。

1.3 開發工具

Pycharm

1.4 操作系統

Ubuntu16.04

1.5 數據庫

使用Flask-SQLAlchemy管理SQLite(Unix)

Flask-SQLAlchemy數據庫極大地簡化了之前老版本數據的操作,它在存儲、查詢方面表現出色,消耗時間少。所以利用它來管理SQLite更為方便,同時響應速度更快。

2 數據庫規劃

2.1 任務陳述

競賽實驗室剛成立,為了更加公正地評估大家平時學習情況,制定了一系列的積分制度,積分與日常的比賽、討論班、考勤等掛鉤。由于積分關聯項過多、比賽種類不一、實驗室人員增加,與之相關的信息量急劇增多。管理人員通過 Excel 手動維護信息力不從心,需要實驗室管理系統提高效率。為了提高大家學習效率,對已做題目信息、比賽數據統計變得尤為重要,如題目類型、題目來源、題目難度等。本實驗室管理系統包括人員管理、隊伍管理、比賽信息管理、積分管理、題目管理、討論班管理六大模塊,對于不同的用戶給予不同的權限。

2.2 需求分析

1) 用戶需求說明

① 數據需求:

實驗室人員信息記錄:學號、姓名、學院、聯系方式、OJ 賬號、積分;

隊伍信息記錄: 隊伍人員組成,隊伍積分、隊伍參與比賽信息;

積分信息記錄: 個人積分與隊伍積分;

比賽信息記錄: 比賽日期、比賽地點、比賽類型、各參賽隊伍成績;

題目信息記錄: 題目類型、題目難度、來源;

討論班信息記錄: 主講人,相關課件。

② 數據錄入:

實驗室人員信息錄入:學號、姓名、學院、聯系方式、 OJ 賬號、頭像、Email;

新建隊伍信息錄入:隊名、隊員組成、頭像、賬號;

比賽信息錄入:比賽日期、比賽地點、比賽類型、比賽形式、相關隊伍、相關問題;

題目信息錄入:來源、編號;

討論版錄入:主講人信息、時間、年級、信息、相關文件上傳;

初始積分錄入;

用戶之間的相互關注、用戶發表公告。

② 數據更新和刪除:

實驗室人員信息更改;

隊伍信息修改;

比賽信息修改;

題目信息修改、刪除;

個人、隊伍積分更新;

用戶之間取消關注、修改公告信息。

③ 數據查看

按照 id 或姓名或積分升序列出用戶部分信息 (姓名、 Email、最后訪問時間、分數)

根據用戶姓名展示用戶詳細信息 (頭像、發表過的公告、關注者人數)

按照 id 或姓名或積分升序列出隊伍部分信息 (隊名、成員組成、賬號、分數)

根據隊伍姓名展示隊伍詳細信息 (頭像、參加過的比賽、最高獎項)

按照 id 升序列出討論班部分信息 (時間、主講人、年級、內容)

根據關鍵字檢索討論班信息、比賽信息

對特定討論班相關文件進行下載

根據比賽名稱展示比賽詳細信息 (頭像、包括題目列表等)

展示最近時間實驗室人員參加的比賽

2) 系統需求說明

① 安全性:

數據庫必須有口令保護

數據庫中不能明文存儲密碼

用戶注冊賬號需要郵箱認證

用戶之間給予不同的權限

② 備份和恢復:

每天數據備份一份

③ 法律問題

對用戶數據的處理遵守法律

2.3 數據庫邏輯設計

實體的設置

設置User、Team、Contest、Problem、Seminar、Account、Post實體集,具體描述見圖。

2.4 表示聯系

每個隊伍至多包含三名隊員,每個隊伍和隊員對應一個賬號,通過賬號參加比賽,每個比賽包括一些問題,用戶之間可以互相關注,用戶定期會舉行討論班,發布重要公告。

2.5 實體集屬性

1) User

Email、Score、Account、Phone、Name、AboutMe分別代表實驗室人員Email、個人積分、賬號ID、電話、姓名、自我介紹,Email為認證郵箱,作為主鍵,Account為外鍵。

2) Team

ID、S1、S2、S3、Name、Score、AboutMe分別代表隊伍ID、隊員一用戶主鍵、隊員二用戶主鍵、隊員三用戶主鍵、隊伍名稱、隊伍分數、隊伍自我介紹。

3) Problem

ID、Source、Index分別代表問題ID、來源、編號,如來源為‘HDU、編號為‘1001。其中ID為主鍵。

4) Contest

其中Name代表競賽名稱;Participants代表參賽人(隊伍)數;CompetitionLevel代表競賽級別,如‘省賽,‘區域賽,‘世界總決賽等;Format代表競賽賽制,比如‘ACM-ICPC,‘OI等。Time、Place、ID分別代表競賽時間、地點、ID,其中ID為主鍵。

5) Seminar

Speakerid代表主講人ID,Time代表時間,Grade代表年級,About代表討論班內容簡介。

6) 關系類型

既包括一對一關系,又包括多對一關系,多對多關系。對于賬號參加比賽來說,我們不僅需要存儲賬號 id、比賽 id,還需要存儲參加比賽的排名、獎牌。這樣才可以更好地維護 Score 屬性,對于 SQLAlchemy,我們可以通過將多對多關系的左右兩側拆成兩個基本的一對多關系,在關聯表中記錄額外信息即可。

3 遇到的問題

3.1 權限設置

由于本系統模塊數較多,根據不同權限使用不同視圖變得極其繁瑣,因此使用位標志法,使用一個整數,表示位標志。各個操作都對應一個位位置,能執行某項操作的用戶,該位會設置成 1. 比如 ‘1010, 代表第一位和第三位對應的操作有權限進行,第二位和第四位對應的操作無權限執行

4 郵箱認證

使用 Flask?Mail發郵件的時候需要設置電子郵件服務器的端口,這個不同郵箱是不一樣的, 并且程序中使用的密碼并不是郵箱密碼,而是我們在設置 SMTP 時分配的密碼。

5 文件操作

對于隊伍和比賽,有的時候需要設置頭像,頭像的存儲可以使用 LargeBinary, 渲染時直接使用 base64:b64encode 即可,但是對于大文件 (比如討論班上傳的文件),不能存儲到數據庫中,否則會大大降低數據庫的性能,因此可以在數據庫中存儲文件路徑,等到客戶端下載時可以直接在服務端磁盤上找到。

6 優化

對于多對多關系,如果一端連接的數量是個不大的數量,可以考慮通過在一側多加一些屬性來表示。

比如此數據庫中 User 與 Team,考慮到已經解散的隊伍的存在, User 和 Team 嚴格來說是多對多關系,但一個隊伍最多三名隊員,因此直接在隊伍實體集上添加了三個屬性,分別表示三個 user 的主鍵就好。

7 數據同步

賬號和 User 是一對一的關系,如果我們將賬號名作為賬號的主鍵,在我們修改賬號名后,不僅需要維護 Account 實體集元素,也要修改 User 對應賬號主鍵。

8 結論

對于開發者來說,設計一個系統是一個龐大的項目。從各種文檔的閱讀到實際項目中需求分析、概念結構設計、邏輯系統設計、物理系統設計的一系列過程,親身體驗了開發系統的過程. 很多東西在文檔中看著挺簡單,思路也很清晰,但是在實際使用的會有意想不到的問題,這時才會發現其中的難度. 從最初對于Web界面煩瑣的埋怨,到最后驚嘆于Flask的精簡。

整個系統的設計,最重要的一個部分就是數據庫的設計。利用Flask框架對于頁面的設計不難,如何設計好最優的數據庫是整個系統的關鍵。

編碼固然不易,但是一個項目最重要的不在于如何實現,而是實現之前的需求分析和模塊設計。

參考文獻:

[1] 丁旭.基于B/S架構的軟件項目實訓:JSP[M].北京:清華大學出版社,2011.

[2] 劉長龍.Python高效開發實戰:Django、Tornado、Flask、Twisted[M].北京:電子工業出版社,2016.

[3] 李輝.Flask Web開發實戰:入門、進階與原理解析[M].北京:機械工業出版社,2018.

[4] 明日科技. Java Web從入門到精通[M].2版.北京:清華大學出版社,2017.

【通聯編輯:謝媛媛】

主站蜘蛛池模板: 国产永久在线观看| 91成人试看福利体验区| 香蕉视频在线精品| 天天综合网亚洲网站| 欧美成人二区| 人人澡人人爽欧美一区| 热久久综合这里只有精品电影| 久久香蕉国产线看观看式| 国产二级毛片| 无码aaa视频| 免费又黄又爽又猛大片午夜| 国产爽歪歪免费视频在线观看| 成人午夜久久| 亚洲婷婷六月| 亚洲无线一二三四区男男| 国产91丝袜在线播放动漫| 精品91视频| 日韩在线影院| 精品无码国产自产野外拍在线| 5388国产亚洲欧美在线观看| 99久久人妻精品免费二区| 午夜限制老子影院888| 激情影院内射美女| 色婷婷亚洲综合五月| 亚洲美女一区| 99国产精品免费观看视频| 精品人妻AV区| 日韩在线播放中文字幕| 亚洲精品午夜天堂网页| 久久夜夜视频| 久久精品国产精品青草app| 9久久伊人精品综合| 国产成年无码AⅤ片在线| 丁香六月综合网| 欧美成人国产| 看你懂的巨臀中文字幕一区二区| 亚洲AⅤ永久无码精品毛片| av在线5g无码天天| 99青青青精品视频在线| 亚洲浓毛av| 精品福利国产| 久久久无码人妻精品无码| 91无码国产视频| 日韩亚洲高清一区二区| 欧美a在线视频| 亚洲无线一二三四区男男| 日日碰狠狠添天天爽| 国产主播一区二区三区| 欧美国产视频| 亚洲精品你懂的| 久久99精品久久久久纯品| 91精品国产自产在线老师啪l| 国产欧美在线| 国产欧美网站| 久久久久人妻精品一区三寸蜜桃| 毛片在线区| 日韩欧美中文在线| 中文字幕永久视频| 亚洲精品国产乱码不卡| 高清无码一本到东京热| 久久久久九九精品影院| 亚洲国产天堂在线观看| 91久久大香线蕉| 青青青亚洲精品国产| 欧洲极品无码一区二区三区| 波多野结衣中文字幕久久| 亚洲欧美另类日本| 成人久久18免费网站| 欧美精品v日韩精品v国产精品| 极品国产在线| 国产无码制服丝袜| 欧美亚洲日韩不卡在线在线观看| 天天综合网亚洲网站| 国产自在线拍| 2021国产乱人伦在线播放| 精品视频一区二区观看| 激情亚洲天堂| 操国产美女| 黑人巨大精品欧美一区二区区| 在线观看无码av五月花| 日韩无码视频专区| 香蕉伊思人视频|