云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件全套 單元1-5 我的云服務(wù)器-我的云盤_第1頁
云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件全套 單元1-5 我的云服務(wù)器-我的云盤_第2頁
云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件全套 單元1-5 我的云服務(wù)器-我的云盤_第3頁
云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件全套 單元1-5 我的云服務(wù)器-我的云盤_第4頁
云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件全套 單元1-5 我的云服務(wù)器-我的云盤_第5頁
已閱讀5頁,還剩442頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

云應(yīng)用開發(fā)實(shí)戰(zhàn)單元1-我的云服務(wù)器項(xiàng)目1.1創(chuàng)建虛擬機(jī)與數(shù)據(jù)庫項(xiàng)目1.2設(shè)計(jì)普通用戶程序項(xiàng)目1.3設(shè)計(jì)管理員程序項(xiàng)目1.4部署應(yīng)用程序到EC2云端實(shí)例項(xiàng)目1.5綜合實(shí)訓(xùn)—我的云服務(wù)器單元3—航班數(shù)據(jù)采集及可視化分析知識目標(biāo):掌握亞馬遜云科技賬號密鑰知識掌握亞馬遜云科技賬號的權(quán)限策略知識掌握AmazonEC2服務(wù)知識掌握Linux操作系統(tǒng)知識掌握Python在Linux中的開發(fā)知識掌握FlaskWeb程序的開發(fā)知識掌握SHA256加密知識掌握FlaskWeb操作數(shù)據(jù)庫的知識掌握正則表達(dá)式數(shù)據(jù)驗(yàn)證知識掌握AmazonEC2虛擬機(jī)知識

能力目標(biāo):能創(chuàng)建亞馬遜云科技賬號并獲取密鑰能使用策略配置賬號權(quán)限能使用AmazonEC2服務(wù)創(chuàng)建Linux虛擬機(jī)能在Linux中搭建Python開發(fā)運(yùn)行環(huán)境能使用Flask開發(fā)簡單的Web程序能使用正則表達(dá)式驗(yàn)證數(shù)據(jù)的有效性能使用SHA256對密碼進(jìn)行加密存儲能使用Flask進(jìn)行數(shù)據(jù)庫的基本讀寫操作能使用分頁的方式顯示數(shù)據(jù)能使用AmazonRDS創(chuàng)建MySQL數(shù)據(jù)庫實(shí)例項(xiàng)目1.1創(chuàng)建虛擬機(jī)與數(shù)據(jù)庫創(chuàng)建AWSIAM用戶使用策略配置權(quán)限創(chuàng)建AmazonEC2Linux虛擬機(jī)創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.1創(chuàng)建AWS訪問賬號任務(wù)描述我們要使用AWS的云服務(wù),就必須先有一個(gè)能操作云服務(wù)的賬號,這個(gè)任務(wù)目的就是引導(dǎo)大家創(chuàng)建一個(gè)AWS賬號。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.1創(chuàng)建AWS訪問賬號IAM服務(wù)AWSIdentityandAccessManagement(IAM)是一項(xiàng)AWS的托管服務(wù),為使用AmazonWebServices(AWS)的客戶在AWS中管理用戶和用戶權(quán)限。借助IAM,可以集中管理用戶、訪問密鑰等安全憑證,以及用于管理用戶訪問AWS資源的權(quán)限。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.1創(chuàng)建AWS訪問賬號AWS賬號訪問IAM用戶訪問亞馬遜云科技的方式主要有三種,管理控制臺、CLI命令行界面和SDK編程訪問。在創(chuàng)建用戶時(shí),可以按照需求進(jìn)行選擇。(1)管理控制臺是一個(gè)基于Web的平臺,可以使用這個(gè)平臺操作亞馬遜云科技的各種云服務(wù),通過用戶名、密碼可以登錄到亞馬遜云科技管理控制臺。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.1創(chuàng)建AWS訪問賬號AWS賬號訪問(2)CLI命令行界面讓用戶能夠在命令行Shell中使用命令與亞馬遜云科技服務(wù)進(jìn)行交互。用戶也可以通過Python語言調(diào)用亞馬遜云科技的SDK程序操作云服務(wù)。這兩種方式操作云服務(wù)時(shí),需要?jiǎng)?chuàng)建IAM用戶時(shí)生成的訪問密鑰(訪問密鑰ID(AccessKeyID)和秘密訪問密鑰(SecretAccessKey))。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.1創(chuàng)建AWS訪問賬號創(chuàng)建IAM用戶(1)使用根用戶登錄控制臺,選擇IAM服務(wù)。(2)添加用戶,選擇訪問權(quán)限類型為“編程訪問”以及“AWS管理控制臺訪問”,并設(shè)置控制臺密碼為自定義密碼,點(diǎn)擊“下一步:權(quán)限”。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.1創(chuàng)建AWS訪問賬號(3)不添加權(quán)限,點(diǎn)擊“下一步:標(biāo)簽”。(4)不添加標(biāo)簽,點(diǎn)擊“下一步:審核”。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.1創(chuàng)建AWS訪問賬號(5)審核創(chuàng)建的用戶信息,點(diǎn)擊“創(chuàng)建用戶”。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.1創(chuàng)建AWS訪問賬號保存AWS賬號信息創(chuàng)建用戶成功,賬號的AccessKeyID(訪問密鑰ID)與AccessSecretKey(秘密訪問密鑰)包含在一個(gè).csv文件中,下載這個(gè)文件后可以獲取這些值。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.2使用策略配置權(quán)限訪問控制當(dāng)IAM用戶在AWS中發(fā)出請求時(shí),AWS云服務(wù)會檢查其是否具有權(quán)限。我們可以創(chuàng)建策略并將其附加到IAM身份或AWS資源上,以便管理AWS中的訪問。策略是AWS中的JSON文檔,在附加到身份或資源時(shí),策略定義它們的權(quán)限。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.2使用策略配置權(quán)限基于身份的策略和基于資源的策略策略是AWS中的對象;在與標(biāo)識或資源相關(guān)聯(lián)時(shí),策略定義它們的權(quán)限。在創(chuàng)建權(quán)限策略以限制對資源的訪問時(shí),可以選擇基于身份的策略或基于資源的策略。基于身份的策略可以附加到IAM用戶、組或角色。這些策略可讓您指定該身份可執(zhí)行哪些操作(其權(quán)限)。基于資源的策略附加到某個(gè)資源。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.2使用策略配置權(quán)限為用戶分配權(quán)限的方式有三種:將用戶添加到組、從現(xiàn)有用戶復(fù)制權(quán)限、直接附加現(xiàn)有策略。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.2使用策略配置權(quán)限直接附加現(xiàn)有策略(1)查看用戶現(xiàn)有權(quán)限。(2)添加訪問EC2實(shí)例的權(quán)限。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.2使用策略配置權(quán)限直接附加現(xiàn)有策略(3)再次查看用戶權(quán)限。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.2使用策略配置權(quán)限將用戶添加到組作為AWS最佳實(shí)踐,我們可以將策略附加到組,然后使用戶成為相應(yīng)的組的成員。(1)創(chuàng)建組“EC2-Support”。(2)為EC2-Support組添加AmazonEC2FullAccess策略。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.2使用策略配置權(quán)限(3)將用戶加入EC2-Support組。(4)查看用戶現(xiàn)有權(quán)限。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.2使用策略配置權(quán)限從現(xiàn)有用戶復(fù)制權(quán)限選擇此選項(xiàng)可從現(xiàn)有用戶將所有策略復(fù)制到新用戶。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)EC2服務(wù)AmazonElasticComputeCloud(AmazonEC2)在AWS云中提供可擴(kuò)展的計(jì)算能力。使用AmazonEC2可避免前期的硬件投入,因此能夠快速開發(fā)和部署應(yīng)用程序。通過使用AmazonEC2,可以根據(jù)自身需要啟動(dòng)任意數(shù)量、類型的虛擬服務(wù)器、配置安全和網(wǎng)絡(luò)以及管理存儲。同時(shí),將AmazonEC2與彈性伸縮組(AutoScalingGroup)搭配使用,可以根據(jù)工作負(fù)載的大小動(dòng)態(tài)調(diào)整實(shí)例的數(shù)量,使成本與性能間取得更佳的平衡。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)實(shí)例(Instance)AWS云中的虛擬服務(wù)器,每個(gè)實(shí)例的CPU處理能力、內(nèi)存容量、存儲大小和聯(lián)網(wǎng)能力的組合情況各不相同,可以根據(jù)需求搭配不同的實(shí)例類型。Amazon系統(tǒng)映像(AMI)Amazon系統(tǒng)映像(AMI)是一種包含軟件配置(例如,操作系統(tǒng)、應(yīng)用程序服務(wù)器和應(yīng)用程序)的模板,提供啟動(dòng)實(shí)例所需的信息。在啟動(dòng)實(shí)例時(shí),必須指定AMI。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)(1)使用IAM賬號登錄進(jìn)入控制臺(2)登錄進(jìn)入后選擇EC2服務(wù)。(3)點(diǎn)擊“啟動(dòng)實(shí)例”。1.發(fā)起實(shí)例啟動(dòng)項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)(1)選擇Amazon系統(tǒng)映像(AMI)(2)選擇實(shí)例類型2.啟動(dòng)實(shí)例項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)(3)配置實(shí)例詳細(xì)信息(4)添加存儲2.啟動(dòng)實(shí)例項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)(5)添加標(biāo)簽(6)配置安全組2.啟動(dòng)實(shí)例在本項(xiàng)目中以開發(fā)/測試為主要目的,因此可將來源IP設(shè)置為任何位置,但在生產(chǎn)環(huán)境建議限制來源IP的地址。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)(7)核查實(shí)例啟動(dòng),點(diǎn)擊“啟動(dòng)”。創(chuàng)建新密鑰對,并保存。2.啟動(dòng)實(shí)例項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)查看實(shí)例項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)3.連接實(shí)例(1)如果本地計(jì)算機(jī)操作系統(tǒng)是Linux或macOSXa)本地安裝SSH客戶端。b)終端窗口中,使用ssh命令連接實(shí)例,命令如下:ssh-i/path/my-key-pair.pemmy-instance-user-name@my-instance-public-dns-name其中/path/my-key-pair.pem代表私有密鑰的本地路徑和文件名(.pem);my-instance-user-name代表實(shí)例的用戶名,對于AmazonLinux系統(tǒng),用戶名為ec2-user;my-instance-public-dns-name代表實(shí)例的公有DNS名稱。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)3.連接實(shí)例(2)如果本地計(jì)算機(jī)操作系統(tǒng)是Windowsa)本地安裝PuTTY。b)使用PuTTY提供的工具PuTTYgen,將私有密鑰my-key-pair.pem(.pem文件)轉(zhuǎn)換為my-key-pair.ppk(.ppk文件)。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.3創(chuàng)建AmazonEC2Linux虛擬機(jī)3.連接實(shí)例(2)如果本地計(jì)算機(jī)操作系統(tǒng)是Windowsc)使用PuTTY連接實(shí)例。啟動(dòng)PuTTY,在Category窗格中,選擇Session,在HostName框中,輸入實(shí)例的公有DNS。在Category窗格中,展開Connection,再展開SSH,然后選擇Auth。完成以下操作:選擇Browse,選擇為密鑰對生成的my-key-pair.ppk(.ppk文件),然后選擇打開。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫AmazonRDSAmazonRelationalDatabaseService(AmazonRDS)是一項(xiàng)Web服務(wù),讓用戶能夠在AWS云中更輕松地設(shè)置、操作和擴(kuò)展關(guān)系數(shù)據(jù)庫。AmazonRDS提供六種常見的數(shù)據(jù)庫引擎選項(xiàng),包括AmazonAurora、MySQL、MariaDB、Oracle、MicrosoftSQLServer和PostgreSQL。它可以為用戶提供經(jīng)濟(jì)實(shí)用的可調(diào)容量,并承擔(dān)常見的數(shù)據(jù)庫管理任務(wù)。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫1.發(fā)起RDS數(shù)據(jù)庫實(shí)例啟動(dòng)(1)登錄根賬號,為IAM用戶添“AmazonRDSFullAccess”策略。使用已有的IAM賬號登錄進(jìn)入控制臺。(2)打開AmazonRDS控制臺。(3)創(chuàng)建MySQL數(shù)據(jù)庫實(shí)例。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫2.啟動(dòng)實(shí)例(1)選擇數(shù)據(jù)庫引擎為MySQL(2)選擇使用案例項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫2.啟動(dòng)實(shí)例(3)指定數(shù)據(jù)庫詳細(xì)信息項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫2.啟動(dòng)實(shí)例(4)配置高級設(shè)置項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫2.啟動(dòng)實(shí)例(5)查看數(shù)據(jù)庫實(shí)例(6)查看數(shù)據(jù)庫實(shí)例的終端節(jié)點(diǎn)與端口項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫3.用戶管理數(shù)據(jù)庫設(shè)計(jì)(1)連接數(shù)據(jù)庫遠(yuǎn)程連接RDS數(shù)據(jù)庫,使用命令:mysql-h<endpoint>-P3306-u<mymasteruser>-p其中<endpoint>為數(shù)據(jù)庫的終端節(jié)點(diǎn)。也可以使用可視化工具(如Navicat)連接RDS數(shù)據(jù)庫。項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫3.用戶管理數(shù)據(jù)庫設(shè)計(jì)(2)創(chuàng)建數(shù)據(jù)庫與數(shù)據(jù)表創(chuàng)建數(shù)據(jù)庫usermanage,SQL語句如下:CREATEDATABASEusermanageDEFAULTCHARACTERSETutf8mb4DEFAULTCOLLATEutf8mb4_general_ci;項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫3.用戶管理數(shù)據(jù)庫設(shè)計(jì)在usermanage數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表user,SQL語句如下:USEusermanage;CREATETABLEuser(idINTNOTNULLAUTO_INCREMENT,userVARCHAR(255),pwdVARCHAR(255),emailVARCHAR(255),PRIMARYKEY(id));項(xiàng)目1.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.1.4創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫3.用戶管理數(shù)據(jù)庫設(shè)計(jì)在表user中插入admin管理員用戶,密碼為1(用sha256加密),SQL語句如下:INSERTINTOuserVALUES(1,’admin’,’6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b’,’123@’);2項(xiàng)目1.2設(shè)計(jì)普通用戶程序安裝Python開發(fā)程序設(shè)計(jì)用戶登錄程序設(shè)計(jì)用戶注冊程序設(shè)計(jì)信息更新程序項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.1安裝Python開發(fā)程序1.在EC2實(shí)例上安裝Python運(yùn)行環(huán)境使用yum程序包管理器安裝,命令如下:yuminstallpython3-y2.使用pip安裝Flask與PyMySQL命令如下:pipinstallflaskpipinstallpymysql項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.1安裝Python開發(fā)程序3.Flask框架Flask是一個(gè)基于Python開發(fā)并且依賴jinja2模板和WerkzeugWSGI服務(wù)的一個(gè)微型框架,“微”意味著Flask旨在保持核心的簡單,但同時(shí)又易于擴(kuò)展。默認(rèn)情況下,F(xiàn)lask不包含數(shù)據(jù)庫抽象層、表單驗(yàn)證,或是其他任何已有多種庫可以勝任的功能。然而,F(xiàn)lask支持用擴(kuò)展來給應(yīng)用添加這些功能。Flask的這些特性,使得它在Web開發(fā)方面變得非常流行。項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.2設(shè)計(jì)用戶登錄程序任務(wù)描述用戶登錄模塊主要用于實(shí)現(xiàn)用戶的登錄。用戶需要填寫正確的用戶名和密碼,點(diǎn)擊“登錄”按鈕,即可實(shí)現(xiàn)用戶登錄,跳轉(zhuǎn)至相應(yīng)的用戶界面。如果輸入的用戶名或密碼不正確,則提示錯(cuò)誤。同時(shí),在此頁面上也可以點(diǎn)擊“注冊”按鈕,進(jìn)行新用戶的注冊。項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.2設(shè)計(jì)用戶登錄程序1.創(chuàng)建Flask項(xiàng)目在本地新建Flask項(xiàng)目app,其中包括app.py入口程序及兩個(gè)子文件夾static和templates,static文件夾存放css/js靜態(tài)資源,templates文件夾存放html模板文件。項(xiàng)目文件組織結(jié)構(gòu)如下:/app/app.py/static/templates項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.2設(shè)計(jì)用戶登錄程序2.jQuery與layui框架jQuery是一個(gè)快速的、簡潔的javaScript庫。layui是一款采用自身模塊規(guī)范編寫的前端UI框架,遵循原生HTML/CSS/JS的書寫與組織形式。我們可以借助jQuery與layui框架完成前端頁面的開發(fā)。layui的使用可參考官方文檔:/doc/。項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.2設(shè)計(jì)用戶登錄程序3.session的使用在Flask中使用session需配置“SECRET_KEY”,一般設(shè)置為24位的字符。代碼如下:#從Flask模塊導(dǎo)入sessionfromflaskimportsession#設(shè)置密鑰app=Flask(__name__)app.secrect_key='A0Zr98j/3yXR~XHH!jmN]LWX/,?RT'或者隨機(jī)數(shù)(os.urandom(24))項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.2設(shè)計(jì)用戶登錄程序4.jsonify的使用Flask提供了jsonify函數(shù)供用戶處理返回的序列化json數(shù)據(jù)。代碼如下:#從Flask模塊導(dǎo)入jsonifyfromflaskimportjsonify5.PyMySQL的使用操作MySQL的基本流程:建立數(shù)據(jù)庫連接、創(chuàng)建游標(biāo)對象、執(zhí)行SQL語句、關(guān)閉游標(biāo)、關(guān)閉數(shù)據(jù)庫連接。代碼如下:importpymysql項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.2設(shè)計(jì)用戶登錄程序#連接數(shù)據(jù)庫,參數(shù)分別是主機(jī)名或IP、用戶名、密碼、數(shù)據(jù)庫名稱、端口號、字符集db=pymysql.connect(host='',user='root',password=‘xxx',db='usermanage',port=3306,charset='utf8mb4')#操作數(shù)據(jù)庫#使用cursor()方法創(chuàng)建一個(gè)游標(biāo)對象curcur=db.cursor()#對數(shù)據(jù)庫執(zhí)行查詢操作try:cur.execute("select*fromdemoTable")result=cur.fetchall()print("demoColumn1","demoColumn2")#關(guān)閉數(shù)據(jù)庫連接db.close()項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.2設(shè)計(jì)用戶登錄程序6.用戶登錄頁面index.html項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.2設(shè)計(jì)用戶登錄程序7.設(shè)計(jì)SHA256加密函數(shù)用戶密碼經(jīng)過加密后存入數(shù)據(jù)庫中,編寫函數(shù)sha256_crypt實(shí)現(xiàn)加密功能,函數(shù)如下:defsha256_crypt(s):m=hashlib.sha256()b=s.encode(encoding='utf-8')m.update(b)sm=m.hexdigest()print(sm)returnsm項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.2設(shè)計(jì)用戶登錄程序8.設(shè)計(jì)用戶登錄Web程序用來完成用戶登錄及注冊頁面的跳轉(zhuǎn)。用戶登錄時(shí),要查詢數(shù)據(jù)庫,判斷表單提交的用戶名、密碼是否存在,若存在,還需要判斷該用戶是否為管理員用戶,主要結(jié)構(gòu)如下:@app.route('/')defindex():"""用戶登錄頁面"""returnrender_template('index.html')

@app.route('/login/',methods=['POST'])deflogin():"""用戶登錄"""user=request.form.get('user')pwd=request.form.get('pwd')con=con_db()cu=con.cursor()cu.execute("selectidfromuserwhereuser='%s'andpwd='%s'"%(user,sha256_crypt(pwd)))ifcu.fetchall():session['user']=userifuser=='admin':returnjsonify({'code':2,'msg':'登錄成功'})returnjsonify({'code':0,'msg':'登錄成功'})returnjsonify({'code':1,'msg':'賬號密碼錯(cuò)誤,登錄失敗'})項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.3設(shè)計(jì)用戶注冊程序用戶注冊界面主要用于實(shí)現(xiàn)注冊新用戶功能。在該頁面中,需要填寫用戶名、郵箱、密碼和確認(rèn)密碼,同時(shí)要求用戶名稱必須是數(shù)字和字母的組合,email要驗(yàn)證有效性,密碼和確認(rèn)密碼要一致。如果信息輸入不完整或填寫格式不符合要求,都將提示錯(cuò)誤。項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.3設(shè)計(jì)用戶注冊程序1.正則表達(dá)式的使用用戶在注冊時(shí),通過正則表達(dá)式驗(yàn)證用戶名與郵箱的有效性。代碼如下:user_rz=/^[0-9a-zA-Z]+$/#用戶名是數(shù)字和字母的組合,且不能為空mail_rz=/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+$/#有效郵箱項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.3設(shè)計(jì)用戶注冊程序用戶注冊頁面userreg.html項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.3設(shè)計(jì)用戶注冊程序設(shè)計(jì)用戶注冊程序@app.route('/user_reg/',methods=['POST','GET'])defuser_reg():"""用戶注冊頁面"""returnrender_template('userreg.html')

@app.route('/reg/',methods=['POST'])defreg():"""用戶注冊"""user=request.form.get('user’)pwd=request.form.get('pwd')email=request.form.get('email')con=con_db()cu=con.cursor()cu.execute("selectidfromuserwhereuser=%s",(user,))ifcu.fetchall():returnjsonify({'code':1,'msg':'用戶已存在’})cu.execute("insertintouser(user,pwd,email)values(%s,%s,%s)",(user,sha256_crypt(pwd),email))mit()returnjsonify({'code':0,'msg':'注冊成功'})項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.4設(shè)計(jì)信息更新程序用戶信息查看頁面user.html用戶信息更新頁面userupdate.html項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.4設(shè)計(jì)信息更新程序設(shè)計(jì)用戶信息查看程序@app.route('/user_index/')defuser_index():"""用戶首頁"""user=session.get('user')con=con_db()cu=con.cursor(pymysql.cursors.DictCursor)#獲取用戶信息cu.execute("selectuser,emailfromuserwhereuser=%s",(user,))data=cu.fetchall()ifdata:data=data[0]#返回用戶頁面returnrender_template('user.html',**data)項(xiàng)目1.2設(shè)計(jì)普通用戶程序1.2.4設(shè)計(jì)信息更新程序設(shè)計(jì)用戶信息更新程序@app.route('/user_update/')defuser_update():"""用戶信息更新頁面"""returnrender_template('userupdate.html')@app.route('/put/',methods=['POST','GET'])defput():"""用戶信息更新"""con=con_db()cu=con.cursor(pymysql.cursors.DictCursor)user=session.get('user')email=request.form.get('email’)pwd=request.form.get('pwd’)print(user,pwd)ifpwd:cu.execute('updateusersetpwd=%swhereuser=%s',(sha256_crypt(pwd),user))ifemail:cu.execute('updateusersetemail=%swhereuser=%s',(email,user))mit()returnjsonify({'code':0,'msg':'修改成功'})3項(xiàng)目1.3設(shè)計(jì)管理員程序設(shè)計(jì)查看與查找用戶程序設(shè)計(jì)刪除用戶程序設(shè)計(jì)重置用戶密碼程序項(xiàng)目1.3設(shè)計(jì)管理員程序1.3.1設(shè)計(jì)查看與查找用戶程序管理員頁面admin.html項(xiàng)目1.3設(shè)計(jì)管理員程序1.3.1設(shè)計(jì)查看與查找用戶程序管理員程序@app.route('/admin_index/')defadmin_index():"""管理首頁"""user=session.get('user')con=con_db()

cu=con.cursor(pymysql.cursors.DictCursor)returnrender_template('admin.html',**{})項(xiàng)目1.3設(shè)計(jì)管理員程序1.3.1設(shè)計(jì)查看與查找用戶程序管理員程序@app.route('/get_list/',methods=['GET’])defauser():"""用戶管理"""user=session.get('user’)sc=request.args.get('sc',None)page=int(request.args.get('page',1))limit=int(request.args.get('limit',10))print(sc)con=con_db()cu=con.cursor(pymysql.cursors.DictCursor)sql='selectcount(*)ctfromuserwhere1=1'sql1='select*fromuserwhere1=1'ifsc:sql+="anduserlike'%{}%'".format(sc)sql1+="anduserlike'%{}%'".format(sc)sql1+='groupbyid'sql1+='limit{},{}'.format((1)*limit,limit)print(sql)print(sql1)cu.execute(sql)ct=cu.fetchall()[0].get('ct’)cu.execute(sql1)data=cu.fetchall()returnjsonify({'code':0,'msg':'獲取成功','data':data,'count':ct})項(xiàng)目1.3設(shè)計(jì)管理員程序1.3.2設(shè)計(jì)刪除用戶程序@app.route('/adel/',methods=['POST'])defadel():"""刪除用戶"""pid=request.form.get('pid')con=con_db()cu=con.cursor(pymysql.cursors.DictCursor)cu.execute("deletefromuserwhereid=%s",(pid,))mit()returnjsonify({'code':0,'msg':'刪除成功'})項(xiàng)目1.3設(shè)計(jì)管理員程序1.3.3設(shè)計(jì)重置用戶密碼程序@app.route('/aput/',methods=['POST'])defaput():"""修改用戶"""pid=request.form.get('pid')pwd=request.form.get('pwd')con=con_db()cu=con.cursor(pymysql.cursors.DictCursor)cu.execute("updateusersetpwd=%swhereid=%s",(sha256_crypt(pwd),pid))mit()returnjsonify({'code':0,'msg':'修改成功'})4項(xiàng)目1.4部署應(yīng)用程序到EC2

云端實(shí)例將普通用戶程序部署到EC2云端實(shí)例將管理員程序部署到EC2云端實(shí)例項(xiàng)目1.4部署應(yīng)用程序到EC2云端實(shí)例將程序部署到EC2云端實(shí)例在項(xiàng)目1.1中,我們已經(jīng)完成AmazonEC2的創(chuàng)建,在項(xiàng)目1.2中我們已經(jīng)完成普通用戶程序的設(shè)計(jì),在項(xiàng)目1.3中我們已經(jīng)完成管理員程序的設(shè)計(jì),接下來將所有開發(fā)好的程序上傳至EC2云端實(shí)例。項(xiàng)目1.4部署應(yīng)用程序到EC2云端實(shí)例將程序部署到EC2云端實(shí)例根據(jù)本地操作系統(tǒng)的不同,選擇SCP命令或PSCP命令將Flask項(xiàng)目文件app傳輸?shù)紼C2云端實(shí)例。項(xiàng)目1.4部署應(yīng)用程序到EC2云端實(shí)例將程序部署到EC2云端實(shí)例(1)如果本地計(jì)算機(jī)操作系統(tǒng)是Linux或macOSX使用SCP將文件傳輸?shù)皆品?wù)器。例如,如果私有密鑰文件的名稱為my-key-pair,要傳輸?shù)奈募镾ampleFile.txt,實(shí)例的用戶名為my-instance-user-name,實(shí)例的公有DNS名稱為my-instance-public-dns-name,在終端窗口中,輸入以下命令可將該文件復(fù)制到my-instance-user-name主目錄中:scp-i/path/my-key-pair.pem/path/SampleFile.txtmy-instance-user-name@my-instance-public-dns-name:~項(xiàng)目1.4部署應(yīng)用程序到EC2云端實(shí)例將程序部署到EC2云端實(shí)例(2)如果本地計(jì)算機(jī)操作系統(tǒng)是Windows使用PuTTY安全復(fù)制客戶端將文件傳輸?shù)皆品?wù)器。PuTTY安全復(fù)制客戶端(PSCP)是一個(gè)命令行工具,可用于在Windows計(jì)算機(jī)和Linux實(shí)例之間傳輸文件。要使用PSCP,需要使用通過PuTTYgen轉(zhuǎn)換生成的私有密鑰(.ppk文件)以及Linux實(shí)例的公有DNS名稱。以下示例將Sample_file.txt文件從Windows計(jì)算機(jī)上的C:\驅(qū)動(dòng)器傳輸?shù)紸mazonLinux實(shí)例上的my-instance-user-name主目錄。要傳輸文件,可使用以下命令:pscp-iC:\path\my-key-pair.ppkC:\path\Sample_file.txtmy-instance-user-name@my-instance-public-dns-name:/home/my-instance-user-name/Sample_file.txt5項(xiàng)目1.5綜合實(shí)訓(xùn)—我的云服務(wù)器項(xiàng)目功能項(xiàng)目要點(diǎn)項(xiàng)目實(shí)施項(xiàng)目測試項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目功能這個(gè)項(xiàng)目由三部分組成。1.AmazonEC2Linux虛擬機(jī)的創(chuàng)建把Web開發(fā)程序部署在EC2Linux實(shí)例上,創(chuàng)建我們的云服務(wù)器。2.AmazonRDSMySQL數(shù)據(jù)庫的創(chuàng)建3.普通用戶與管理員Web程序開發(fā)這個(gè)Web程序向普通用戶與管理員用戶提供不同的功能。普通用戶可以注冊并登錄,登錄后能查看到用戶信息,并且可修改注冊郵箱與密碼。數(shù)據(jù)庫中內(nèi)置管理員admin用戶,管理員登錄后可查看所有注冊用戶信息,可刪除用戶,也可以修改用戶密碼。項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目要點(diǎn)這個(gè)綜合項(xiàng)目實(shí)際上是前面各個(gè)項(xiàng)目的綜合應(yīng)用。首先創(chuàng)建能訪問EC2與RDS服務(wù)的AWS賬號,分別創(chuàng)建AmazonEC2Linux實(shí)例與AmazonRDSMySQL數(shù)據(jù)庫實(shí)例,在本地完成Web程序開發(fā),數(shù)據(jù)庫使用RDSMySQL,最終將Web開發(fā)程序部署至云服務(wù)器上,完成我們的第一個(gè)云服務(wù)器的搭建。項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目實(shí)施1.創(chuàng)建AWS訪問賬號并配置權(quán)限(1)登錄AWS官網(wǎng)注冊賬號;(2)創(chuàng)建IAM用戶,為該用戶配置AmazonEC2FullAccess、AmazonRDSFullAccess策略。項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目實(shí)施2.創(chuàng)建AmazonEC2Linux虛擬機(jī)(1)使用IAM用戶登錄進(jìn)入控制臺;(2)創(chuàng)建EC2實(shí)例,并在本地保存好密鑰對(.pem文件);(3)連接EC2實(shí)例;(4)在EC2實(shí)例上安裝Python運(yùn)行環(huán)境;(5)在EC2實(shí)例上安裝Flask與PyMySQL。項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目實(shí)施3.創(chuàng)建AmazonRDSMySQL數(shù)據(jù)庫(1)使用IAM用戶登錄進(jìn)入控制臺;(2)創(chuàng)建數(shù)據(jù)庫實(shí)例,數(shù)據(jù)庫引擎選擇MySQL,可用區(qū)設(shè)置為與EC2實(shí)例相同;(3)連接RDSMySQL數(shù)據(jù)庫,創(chuàng)建用戶數(shù)據(jù)庫usermanage,創(chuàng)建表user,里面包含用戶ID(id)、用戶名稱(user)、密碼(pwd)和email四個(gè)字段,id為主鍵。項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目實(shí)施4.創(chuàng)建Flask項(xiàng)目在本地創(chuàng)建Flask項(xiàng)目app,入口程序主程序app.py,將下載好的layui組件、jQuery庫存放在static文件夾中,html模板文件存放在templates文件夾中。目錄結(jié)構(gòu)如下:/app/app.py/static/lib/layui/jquery-1.12.4.js/templates項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目實(shí)施5.創(chuàng)建Web程序開發(fā)各個(gè)網(wǎng)頁模板文件(1)用戶登錄模板index.html(2)用戶注冊模板userreg.html(3)用戶信息查看模板user.html(4)用戶信息更新模板userupdate.html(5)管理員模板admin.html6.Web開發(fā)主程序app.py項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目實(shí)施7.編輯安全組使用控制臺編輯EC2主機(jī)安全組,添加一條入站規(guī)則,允許5000端口開放給/0。8.將Web應(yīng)用程序部署到EC2云端實(shí)例根據(jù)本地操作系統(tǒng)的不同,選擇SCP命令或PSCP命令將Flask項(xiàng)目文件app上傳至EC2云端實(shí)例。項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目測試1.連接EC2實(shí)例2.運(yùn)行服務(wù)器使用python命令運(yùn)行app.py,即:pythonapp.py那么就可以在互聯(lián)網(wǎng)上使用這個(gè)服務(wù)器了。3.測試運(yùn)行在互聯(lián)網(wǎng),使用http://EC2實(shí)例外網(wǎng)地址:5000訪問,最后完成發(fā)布程序的應(yīng)用測試。項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目測試用戶登錄頁面用戶注冊頁面用戶信息查看頁面用戶信息更新頁面項(xiàng)目1.5綜合實(shí)訓(xùn)

我的云服務(wù)器項(xiàng)目測試使用管理員用戶admin登錄,可以查看、查詢、刪除、修改用戶信息.謝謝觀看

云應(yīng)用開發(fā)實(shí)戰(zhàn)單元2我的有聲圖書2.1使用AmazonPolly語音服務(wù)2.2設(shè)計(jì)圖書管理程序2.3綜合實(shí)訓(xùn)

我的有聲圖書知識目標(biāo):掌握文字轉(zhuǎn)語音的基本知識掌握AmazonPolly服務(wù)知識掌握AmazonRDS數(shù)據(jù)庫存儲知識掌握PythonSDK與Amazon服務(wù)知識掌握FlaskWeb程序設(shè)計(jì)知識掌握HTML5語音文件的播放知識能力目標(biāo):能創(chuàng)建有AmazonPolly權(quán)限的AWS賬號能使用AmazonRDS數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲能使用Flask編寫圖書的管理程序能在Web頁面對圖書數(shù)據(jù)進(jìn)行分頁管理能使用AmazonPolly進(jìn)行文字轉(zhuǎn)語音能使用Flask編寫語音管理與下載的程序能使用HTML5在線播放語音項(xiàng)目2.1使用AmazonPolly語音服務(wù)創(chuàng)建AmazonPolly訪問賬號使用AmazonPolly語音服務(wù)使用boots訪問AWS服務(wù)設(shè)計(jì)AmazonPolly應(yīng)用程序2.1.1創(chuàng)建AmazonPolly訪問賬號任務(wù)描述ASWPolly是一個(gè)文字轉(zhuǎn)語音的服務(wù),要使用這個(gè)服務(wù)就必須先創(chuàng)建一個(gè)有訪問這個(gè)服務(wù)權(quán)限的賬號。知識要點(diǎn)AWS的賬號可以通過三種方式訪問AWS的云資源,一是控制臺(圖形化界面),二是CLI(命令行),三是SDK(編程訪問)。AWS賬號主要有兩個(gè)用途,一個(gè)用于網(wǎng)頁登錄AWS控制臺(Console),另外一個(gè)是使用程序訪問AWS服務(wù),因此AWS賬號有兩種類型。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫1.AWS控制臺賬號AWS控制臺是一個(gè)網(wǎng)頁界面的操作平臺,可以使用這個(gè)平臺操作AWS的各種云服務(wù)。AWS控制臺賬號包括賬號名稱賬號密碼,使用它可以登錄到AWS控制臺。2.AWS程序賬號除了可以使用AWSConsole控制臺操作云服務(wù)外,我們還可以使用Python語言調(diào)用AWS的SDK用程序操作云服務(wù),那么要使用AWS程序賬號,這種賬號包含一個(gè)訪問密鑰ID(AccessKeyID)和一個(gè)私有訪問密鑰(AccessSecretKey)。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫三、任務(wù)實(shí)施1.創(chuàng)建AWS訪問賬號創(chuàng)建一個(gè)AWS的賬號,例如名稱為“polly.audio.user”,并配置它的策略使得它有對Polly和S3的全權(quán)訪問權(quán)利。⑴管理員進(jìn)入AWS服務(wù)控制臺,選擇IAM創(chuàng)建用戶,輸入用戶名稱"polly.audio.user",并選擇,編程訪問,'與,'AWS管理控制臺訪問設(shè)置控制臺訪問密碼,如圖2-1-1所示。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫圖2-1-1添加賬號項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫(2)選擇“直接附加現(xiàn)有策略“,然后選擇“AmazonPollyFullAccess”策略,如圖2-1-2所示。圖2-1-2選擇策略項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫(3)直接下一步,最后看到賬號的審核,如圖2-1-3所示,確定無誤后直接點(diǎn)擊“創(chuàng)建用戶”即可創(chuàng)建該用戶賬號。圖2-1-3審核賬號項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫2.保存AWS賬號信息接下來顯示創(chuàng)建用戶成功,并顯示賬號信息,如圖2-1-4所示。在圖中有一個(gè),'下載.csv''文件的按鈕,點(diǎn)擊后下載一個(gè)名稱為accessKeys.csv的文件,這個(gè)CSV文件有兩行,格式如下:項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫第一行是Key的類型,它們使用逗號分開,第二行就是對應(yīng)的值,我們可以通過讀這個(gè)CSV文件得到各個(gè)值。圖2-1-4賬號信息項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫任務(wù)2.1.2使用AmazonPolly語音服務(wù)任務(wù)描述AmazonPolly是基于人工智能的服務(wù),它能把一段文字朗讀出語音,并提供語音文件的下載。知識要點(diǎn)1.認(rèn)識AmazonPollyAmazonPolly是一種將文本轉(zhuǎn)換為逼真語音的服務(wù),它允許創(chuàng)建能夠說話的應(yīng)用程序,并構(gòu)建全新類別的支持語音功能的產(chǎn)品。Polly的文本轉(zhuǎn)語音(TTS)服務(wù)使用高級深度學(xué)習(xí)技術(shù)來合成聽起來像自然人類語言的語音。AmazonPolly提供眾多語言的幾十種逼真語音,可以構(gòu)建適用于許多不同國家/地區(qū)的具有語音功能的應(yīng)用程序。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫2.AmazonPolly文字轉(zhuǎn)語音給定一段不是太長的中文或者英文文本,AmazonPolly會立即把該文字轉(zhuǎn)為語音,并可以立即播放該語音。如果文本太長,那么ASWPolly會啟動(dòng)一個(gè)異步的任務(wù),把轉(zhuǎn)好的語音文件存儲到AWSS3的存儲桶中。是同步還是異步只取決于調(diào)用的接口,在控制臺上看起來是自動(dòng)的,其實(shí)是控制臺自動(dòng)區(qū)分了,并調(diào)用了不同的接口。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫三、任務(wù)實(shí)施1.登錄AWS控制臺使用前面創(chuàng)建的polly.audio.user賬號登錄到AWS控制臺,找到AmazonPolly服務(wù)。2.使用AmazonPolly服務(wù)

點(diǎn)擊打開AmazonPolly服務(wù),如圖2-1-5所示,這個(gè)界面提供了幾個(gè)功能:

⑴輸入一段文字,點(diǎn)擊“收聽語音”,就可以聽到這段文字的語音。

項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫(2)使用”語言與區(qū)域“可以選擇不同的語言,例如中文或者英文。(3)使用“語音”可以選擇不同人的聲音,例如男聲或者女聲。(4)點(diǎn)擊”下載MP3”可以下載語音的MP3文件。(5)點(diǎn)擊,,純文本"或者"SSML“可以選擇要轉(zhuǎn)換的文本格式。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫圖2-1-5Amazon

Polly服務(wù)

但是注意一點(diǎn)Polly只能現(xiàn)場轉(zhuǎn)換不太長的文本(大約3000字符以內(nèi)),太長的文本轉(zhuǎn)換比較耗時(shí),Polly會啟動(dòng)一個(gè)后臺的任務(wù)進(jìn)行異步轉(zhuǎn)換,轉(zhuǎn)換好的語言文件會自動(dòng)存儲到AWSS3的一個(gè)存儲桶中。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫任務(wù)2.1.3使用boto3訪問AWS服務(wù)一、任務(wù)描述

使用AWS的Python程序SDK,編寫程序調(diào)用Polly服務(wù)把文字轉(zhuǎn)為語音。二、知識要點(diǎn)1.AWSSDK

AWS的服務(wù)不但可以使用控制臺操作,而且AWS提供各種常用編程語言的SDK,我們可以利用SDK編寫程序訪問AWS的各種服務(wù),如圖2-1-6所示。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫圖2-1-6AWSSDK從圖中可以看到AWS的Python的SDK名稱為boto3,要使用Python編寫程序訪問AWS服務(wù)就必須先安裝boto3庫。2.使用AWS賬號AWS賬號的AccessKeyID與SecretAccessKey信息存儲在accessKeys.csv文件中,編寫函數(shù)readKeys讀出。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫 3.創(chuàng)建客戶端對象Python使用boto3包的函數(shù)庫訪問AWS。創(chuàng)建客戶端對象基本方法是boto3.client方法,并傳遞aws_access_key_id與aws_access_secret_key以及region_name參數(shù),例如使用前面的cloud.disk.user賬號創(chuàng)建client如下:項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫 4.文本轉(zhuǎn)語音

使用Python調(diào)用Boto3中的synthesize_speech函數(shù)可以實(shí)現(xiàn)文本轉(zhuǎn)語音,該函數(shù)有許多參數(shù)。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫三、任務(wù)實(shí)施安裝boto3Python訪問AWS的庫是boto3,使用pip命令先安裝這個(gè)包:在安裝完畢后就可以編寫程序調(diào)用AWS的APL。

項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫

2.查看boto3文檔

怎么樣使用boto3編寫訪問AWS服務(wù)的程序呢?實(shí)際上可以查看boto3的技術(shù)文檔,網(wǎng)址是:https://boto3.amazonaws.eom/v:l/documentation/api/latest/index.html。

項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫

3.編寫程序程序中語句18-24是實(shí)現(xiàn)語音轉(zhuǎn)換的關(guān)鍵語句項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫任務(wù)2.1.4設(shè)計(jì)AmazonPolly應(yīng)用程序一、任務(wù)描述AmazonPolly控制臺是一個(gè)Web程序,我們使用Flask也可以創(chuàng)建一個(gè)類似的程序,模仿AmazonPolly的控制臺那樣工作。二、知識要點(diǎn)Flask界面模版創(chuàng)建一個(gè)模版程序polly.html,它包含一個(gè)文本輸入框,一個(gè)語言選擇框,一個(gè)轉(zhuǎn)語音的按鈕,一個(gè)下載MP3文件的按鈕項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫2.設(shè)計(jì)Flask服務(wù)器Flask服務(wù)器server.py復(fù)制顯示polly.html模版網(wǎng)頁,當(dāng)用戶輸入文字提交時(shí)接收用戶的輸入,根據(jù)用戶選擇的語言與輸入的文字調(diào)用一個(gè)文字轉(zhuǎn)語音的函數(shù)convertToAudio把文字轉(zhuǎn)為語音。轉(zhuǎn)換的語音文件命名為audio.mp3,存儲在Flask的靜態(tài)文件夾static中。

項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫三、任務(wù)實(shí)施編寫polly.html網(wǎng)頁模版在這個(gè)網(wǎng)頁文件中添加了JavaScript控制函數(shù),使得在選擇中文或者英文時(shí)由例句自動(dòng)出現(xiàn),不需要用戶自己輸入。2.編寫server.py服務(wù)器函數(shù)index是程序的入口,用戶使用它的界面提交文本,函數(shù)converttoaudio負(fù)責(zé)把文字轉(zhuǎn)為mp3的語音文件,函數(shù)download負(fù)責(zé)下載這個(gè)語音文件。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫測試程序執(zhí)行server.py服務(wù)器程序,效果如圖2-1-7所示,選擇中文或者英文,輸入文字后點(diǎn)擊”提交“就可以把文字轉(zhuǎn)為語音,并且可以在網(wǎng)頁上播放這個(gè)語音,點(diǎn)擊”下載”便可以下載這個(gè)audio.mp3語音文件。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫圖2-1-7文字轉(zhuǎn)語音到目前為止我們已經(jīng)知道怎么樣把一段文字轉(zhuǎn)為語音,接下來我們來做一個(gè)圖書管理程序,該程序管理一系列的圖書,程序把這些圖書轉(zhuǎn)為語音,就做成了有聲圖書網(wǎng)站了。項(xiàng)目2.1—?jiǎng)?chuàng)建虛擬機(jī)與數(shù)據(jù)庫項(xiàng)目2.2設(shè)計(jì)圖書管理程序設(shè)計(jì)圖書存儲數(shù)據(jù)庫設(shè)計(jì)圖書增加程序設(shè)計(jì)圖書瀏覽與刪除程序設(shè)計(jì)圖書編輯程序任務(wù)2.2.1設(shè)計(jì)圖書存儲數(shù)據(jù)庫一、任務(wù)描述MySql數(shù)據(jù)庫是常用的一種關(guān)系數(shù)據(jù)庫,AWS云提供了MySql的服務(wù),我們將在這個(gè)有聲圖書項(xiàng)目使用它存儲圖書的數(shù)據(jù)。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序二、知識要點(diǎn)AmazonRDS服務(wù)

AmazonRelationalDatabaseService(AmazonRDS)能夠在云中輕松設(shè)置、操作和擴(kuò)展關(guān)系數(shù)據(jù)庫。它在自動(dòng)執(zhí)行耗時(shí)的管理任務(wù)(如硬件預(yù)置、數(shù)據(jù)庫設(shè)置、修補(bǔ)和備份)的同時(shí),可提供經(jīng)濟(jì)實(shí)用的可調(diào)容量。AmazonRDS在多種類型的數(shù)據(jù)庫實(shí)例(針對內(nèi)存、性能或I/O進(jìn)行了優(yōu)化的實(shí)例)上均可用,并提供六種常用的數(shù)據(jù)庫引擎供您選擇,包括AmazonAurora>PostgreSQL、MySQL、MariaDB、OracleDatabase和SQLServer。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序2.創(chuàng)建MySql數(shù)據(jù)庫實(shí)例MySql數(shù)據(jù)庫是最常用的數(shù)據(jù)庫之一,要使用AmazonRDS中的MySql數(shù)據(jù)庫就必須先創(chuàng)建一個(gè)MySql數(shù)據(jù)庫實(shí)例,并獲取它的服務(wù)器地址。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序三、任務(wù)實(shí)施1.創(chuàng)建數(shù)據(jù)庫實(shí)例創(chuàng)建MySql實(shí)例非常簡單,進(jìn)入AWS服務(wù)選擇RDS后選擇MySql數(shù)據(jù)庫,在創(chuàng)建時(shí)輸入數(shù)據(jù)庫實(shí)例名稱(例如MySql),訪問用戶名稱(例如root)以及訪問密碼,如圖2-2-1所示。圖2-2-1設(shè)置數(shù)據(jù)庫項(xiàng)目2.2—設(shè)計(jì)圖書管理程序圖2-2-2數(shù)據(jù)庫地址2.獲取數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫創(chuàng)建完成后可以看到其訪問的主機(jī)地址(Endpoint),其中端口(Port)為3306,這是MySql數(shù)據(jù)庫的默認(rèn)端口,如圖2-2-2所示。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序圖2-2-3設(shè)置權(quán)限設(shè)置數(shù)據(jù)庫訪問權(quán)限為了能更好第使用這個(gè)數(shù)據(jù)庫實(shí)例,需要設(shè)置它的inbound與outbound的規(guī)則為0000/0,即允許從任何IP地址的服務(wù)器訪問該數(shù)據(jù)庫,如圖2-2-3所示。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序4.保存數(shù)據(jù)庫信息復(fù)制出這個(gè)地址把它保存起來,它是將來使用程序進(jìn)行數(shù)據(jù)庫訪問的主機(jī)地址,可以把數(shù)據(jù)庫地址,用戶,密碼等保存到一個(gè)mySql.csv的文件中,該文件包含兩行數(shù)據(jù),數(shù)據(jù)之間用逗號隔開,格式如下:其中第一行是標(biāo)題,第二行是對應(yīng)的數(shù)據(jù)。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序5.創(chuàng)建圖書數(shù)據(jù)庫這個(gè)數(shù)據(jù)庫可以命名為audiobooks,創(chuàng)建一張圖書表格books如下:其中BID是圖書的ID編號,自動(dòng)增加,關(guān)鍵字;title是圖書的標(biāo)題,不可以重復(fù);author是圖書的作者;language是存儲的文本的語言,可以是英文或者中文;contents是一個(gè)longtext類型,存儲圖書的文字內(nèi)容;image是圖書的封面圖像文件名稱;audio是圖書的語音文件名稱。為了簡化程序我們假定圖書不再劃分章節(jié),如果要?jiǎng)澐终鹿?jié)就需要另外創(chuàng)建一張關(guān)聯(lián)的章節(jié)表格。

項(xiàng)目2.2—設(shè)計(jì)圖書管理程序任務(wù)2.2.2設(shè)計(jì)圖書增加程序一、任務(wù)描述要做一個(gè)有聲圖書網(wǎng)站就必須先增加圖書,只有在數(shù)據(jù)庫中存儲了圖書后才能存儲它的章節(jié)。二、知識要點(diǎn)1.設(shè)計(jì)增加圖書的網(wǎng)頁

這個(gè)增加網(wǎng)頁命名為insertBook.html,表單中包括一個(gè)圖書名稱或者標(biāo)題的輸入框title、圖書作者輸入框author、語言選擇下列列表框yList、文本輸入框contents等,還包括圖書封面圖像顯示的<img>元素與語音播放的<audio>元素項(xiàng)目2.2—設(shè)計(jì)圖書管理程序2.設(shè)計(jì)文本轉(zhuǎn)語音的程序

設(shè)計(jì)一個(gè)audio.py的文件,在這個(gè)文件中設(shè)計(jì)AudioClass管理文本轉(zhuǎn)語音的功能,其中的converToAudio函數(shù)3.設(shè)計(jì)增加圖書的數(shù)據(jù)庫程序創(chuàng)建一個(gè)數(shù)據(jù)庫管理程序database.py,在其中設(shè)計(jì)BookDatabase類管理數(shù)據(jù)庫,創(chuàng)建一個(gè)insertBook的函數(shù)負(fù)責(zé)增加一本圖書記錄。注意在books表中有一個(gè)BID是圖書的關(guān)鍵字,這個(gè)BID只有在新記錄插入后才能確定它的值,因此插入后立即獲取BID值,再根據(jù)這個(gè)BID值確定該圖書的封面圖像文件與語音文件的名稱。圖像文件與語音文件都按圖書的BID編號擴(kuò)展為6位的文件名存儲在static文件夾。例如BID=1的圖書,那么語音文件為000001.mp3,圖像文件為00000.1jpg。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序4.設(shè)計(jì)增加圖書Web程序增加圖書的web接口是它在服務(wù)器server.py中處理5.測試程序

執(zhí)行server.py服務(wù)器,使用:5000/insertBook

地址訪問,結(jié)果如圖2-2-5所示,增加成功后就可以點(diǎn)擊播放其語音。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序任務(wù)2.2.3設(shè)計(jì)瀏覽和刪除圖書程序一、任務(wù)描述增加了部分圖書后,怎么樣取查看到目前有什么圖書呢,該任務(wù)就是設(shè)計(jì)一個(gè)查看程序。如果圖書很多,查看程序應(yīng)該對圖書進(jìn)行分頁和分類,為了簡單起見目前這個(gè)查看程序只做簡單的羅列,不進(jìn)行分頁分類。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序1.設(shè)計(jì)瀏覽圖書模版設(shè)計(jì)一個(gè)selectBook.html的模版,把每本圖書放在一個(gè)<div>塊中,每個(gè)圖書<div>塊是一個(gè)display:inline-block的布局,這樣多個(gè)圖書<div>塊又放在一個(gè)大的<div>塊中,使得圖書會從左到右,從上到下依次排列2.設(shè)計(jì)服務(wù)器程序服務(wù)器的接口是“/selectBooku,這個(gè)頁面主要是管理員管理圖書,主要程序如下:二、知識要點(diǎn)項(xiàng)目2.2—設(shè)計(jì)圖書管理程序項(xiàng)目2.2—設(shè)計(jì)圖書管理程序該函數(shù)如果檢測到cmd為delete,就使用deleteBook函數(shù)刪除這本圖書,然后使用listBook函數(shù)獲取所有圖書books類別,傳遞到selectBook.html中顯示。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序3.設(shè)計(jì)刪除圖書程序刪除圖書時(shí)不但要從books表刪除該圖書記錄,還要?jiǎng)h除該圖書相關(guān)聯(lián)的圖像文件以及語音文件。由于圖像文件雨語音文件時(shí)按BID號形成的jpg與mp3文件,因此給定BID號后就可以刪除它們。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序圖2-2-6瀏覽與刪除圖書4.測試程序

執(zhí)行server.py服務(wù)器,使用:5000/selectBook

地址訪問,結(jié)果如圖2-2-6所示。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序任務(wù)2.2.4設(shè)計(jì)圖書編輯程序一、任務(wù)描述有些圖書信息是錯(cuò)誤的,需要修改,這個(gè)任務(wù)就是在查看圖書的頁面中增加一個(gè)修改功能。二、知識要點(diǎn)圖書編輯頁面模版與增加圖書的十分相似,這里不再贅述。項(xiàng)目2.2—設(shè)計(jì)圖書管理程序三、任務(wù)實(shí)施1.設(shè)計(jì)圖書編輯模版updateBook.html2.測試程序

在selectBook.html中增加一個(gè)編輯圖書的鏈接:項(xiàng)目2.2—設(shè)計(jì)圖書管理程序點(diǎn)擊后就開始編輯BID編號的圖書,如圖2-2-7所示。圖2-2-8編輯圖書項(xiàng)目2.2—設(shè)計(jì)圖書管理程序項(xiàng)目2.3綜合實(shí)訓(xùn)-我的有聲圖書一、項(xiàng)目功能

這個(gè)項(xiàng)目有三個(gè)部分組成,第一部分是AmazonPolly語音服務(wù)器,第二部分是存儲圖書信息的MySql數(shù)據(jù)庫,第三部分是一個(gè)圖書Web服務(wù)器。1.AmazonPolly語音服務(wù)AmazonPolly語音服務(wù)能把一段文字轉(zhuǎn)為語音,如果要轉(zhuǎn)換的文本不是太長的話,Polly轉(zhuǎn)換后會立即返回轉(zhuǎn)換的語音文件數(shù)據(jù)。我們使用boto3中的synthesize_speech函數(shù)可以完成轉(zhuǎn)換。項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書2.圖書信息存儲數(shù)據(jù)庫這個(gè)MySql數(shù)據(jù)庫可以是遠(yuǎn)程的一個(gè)數(shù)據(jù)庫,例如AmazonRDS中的MySql數(shù)據(jù)庫。3.圖書Web服務(wù)器這個(gè)Web服務(wù)器負(fù)責(zé)向一般用戶分頁展示所有的圖書,用戶也可以通過搜索功能查找到所要的圖書。用戶選擇圖書后即可以進(jìn)行圖書文字閱讀或者聆聽語音朗讀,也可以下載語音文件。對于管理員用戶登錄后對所有圖書進(jìn)行管理,包括增加圖書、編輯圖書與刪除圖書、完成圖書文字到語音的轉(zhuǎn)換等工作。項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書二、項(xiàng)目要點(diǎn)

這個(gè)綜合項(xiàng)目實(shí)際上是前面各個(gè)項(xiàng)目的綜合應(yīng)用,但是在圖書瀏覽中做了一些改進(jìn),增加了圖書分頁與搜索的功能,以便管理眾多的圖書。當(dāng)頁面有分頁與搜索功能時(shí),可以使用當(dāng)前頁面參數(shù)pageindex與當(dāng)前搜索過濾關(guān)鍵字key來記錄當(dāng)前頁面的狀態(tài)。因此每次從這個(gè)頁面轉(zhuǎn)去別的新頁面時(shí)都要把pageindex與key傳遞給新的頁面,以便返回時(shí)能回到目前這個(gè)頁面。(1)設(shè)計(jì)分頁查看圖書(2)設(shè)計(jì)服務(wù)器數(shù)據(jù)分頁(3)設(shè)計(jì)圖書搜索功能項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書三、項(xiàng)目實(shí)施

1.創(chuàng)建AmazonPolly訪問權(quán)限的IAM用戶這個(gè)IAM用戶的密鑰保存到accessKeys.csv文件供程序使用2.創(chuàng)建AmazonRDS數(shù)據(jù)庫實(shí)例創(chuàng)建的AmazonRDS數(shù)據(jù)庫實(shí)例用于存儲圖書信息,數(shù)據(jù)庫的鏈接信息存儲在mySql.csv文件供程序使用3.創(chuàng)建Web服務(wù)器的audio.py文件這個(gè)文件包含AudioClass類,它負(fù)責(zé)完成把文字內(nèi)容轉(zhuǎn)換為語音文件,語音文件按圖書編號BID形成mp3文件后存儲在static文件夾。項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書三、項(xiàng)目實(shí)施

4.創(chuàng)建Web服務(wù)器database.py文件這個(gè)文件包含BookDatabase類,負(fù)責(zé)數(shù)據(jù)庫的初始化、增加記錄、刪除記錄、修改記錄和查看記錄等功能5.創(chuàng)建Web服務(wù)器各個(gè)網(wǎng)頁模板文件創(chuàng)建的AmazonRDS數(shù)據(jù)庫實(shí)例用于存儲圖書信息,數(shù)據(jù)庫的鏈接信息存儲在mySql.csv文件供程序使用

項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書四、項(xiàng)目測試網(wǎng)站的主頁如圖2-3-1所示,如果圖書多的話會分頁顯示,用戶可以搜索所要的圖書。

圖2-3-1瀏覽圖書項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書圖2-3-2閱讀圖書四、項(xiàng)目測試擇一本圖書后可以進(jìn)行閱讀、聆聽語音、下載語音,如圖2-3-2所示。項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書四、項(xiàng)目測試管理員登錄后進(jìn)入圖書管理,如圖2-3-3所示,管理員可以增加圖書、編輯圖書、刪除圖書。項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書五、項(xiàng)目發(fā)布

1.創(chuàng)建云盤服務(wù)器使用AmazonEC2建立一個(gè)虛擬機(jī),配置Python與Flask運(yùn)行環(huán)境,并允許端口5000的訪問。2.創(chuàng)建圖書服務(wù)器在云盤服務(wù)器建立一個(gè)文件夾例如AudioBook,把整個(gè)項(xiàng)目文件復(fù)制到這個(gè)文件夾。項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書3.配置賬號與數(shù)據(jù)庫

配置賬號accessKeys.csv文件與數(shù)據(jù)庫文件mySql.csv,使得從云盤虛擬機(jī)能訪問AmazonPolly服務(wù)與AmazonRDSMySql數(shù)據(jù)庫服務(wù)。4.修改server.py的運(yùn)行語句為:5.運(yùn)行服務(wù)器項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書使用Python命令運(yùn)行server.py,即:那么就可以在互聯(lián)網(wǎng)上使用這個(gè)有聲圖書系統(tǒng)了。6.測試程序最后完成發(fā)布程序的應(yīng)用測試。六、項(xiàng)目拓展項(xiàng)目2.3—綜合實(shí)訓(xùn)-我的有聲圖書為了簡單,同時(shí)也基于篇幅的考慮,該項(xiàng)目只能把不太長的文本(一般不超過3000字)轉(zhuǎn)為語音。如果文本比較長,AmazonPolly會在后臺啟動(dòng)一個(gè)異步任務(wù)把文字轉(zhuǎn)為語音,然后把這個(gè)語音文件存儲到指定的S3存儲桶中。由于這個(gè)轉(zhuǎn)換需要時(shí)間,因此是異步完成的。一般處理異步程序會比較麻煩,因?yàn)槲覀儾恢肋@個(gè)過程什么

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論