史寶坤 李欣 王淑嫻 樊笑含 張真真 河北農(nóng)業(yè)大學(xué)
隨著計(jì)算機(jī)技術(shù)的發(fā)展,web開發(fā)技術(shù)也迅速的發(fā)展。它們對(duì)開發(fā)者以及對(duì)編程語(yǔ)言,編程框架的要求越來(lái)越高。而Flask作為簡(jiǎn)單且易于拓展的web框架,適用于前后端分離的應(yīng)用程序的 Web 服務(wù)器端開發(fā),有利于提高開發(fā)者的效率,減少耦合。同時(shí)此框架使用Python語(yǔ)言編寫,許多第三方庫(kù)可供開發(fā)者使用,方便了開發(fā)者的學(xué)習(xí)及開發(fā)。
Python 是一個(gè)面向?qū)ο蟮哪_本語(yǔ)言。它結(jié)構(gòu)簡(jiǎn)單,定義清晰易于開發(fā)者的學(xué)習(xí),閱讀和維護(hù)。它有著豐富的類庫(kù),可以嵌入到其他語(yǔ)言中,被稱為膠水語(yǔ)言。其提供了很多關(guān)于數(shù)據(jù)庫(kù)的接口,適用于MVC開發(fā)模式,提高了開發(fā)者開發(fā)效率。此外,還具有可移植,可拓展等特性。近幾年, 它逐漸成為主流的編程語(yǔ)言,廣泛應(yīng)用到web開發(fā)中。
在使用Python進(jìn)行web應(yīng)用的開發(fā)中,要充分利用它的標(biāo)準(zhǔn)庫(kù)以及第三方庫(kù)。相較于C語(yǔ)言其速度慢。因此,對(duì)于某些速度要求很高的程序代碼,應(yīng)該合理利用其可嵌入性,調(diào)用C語(yǔ)言的代碼,提高程序運(yùn)行速度。
作為一種用Python語(yǔ)言編寫的“微”框架。其依賴 Jinja模板引擎和 Werkzeug工具箱進(jìn)行工作。進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),可以根據(jù)自己的需要選取合適的數(shù)據(jù)庫(kù)。同時(shí)可以使用SQLAlchemy進(jìn)行對(duì)象關(guān)系映射,更加高效的進(jìn)行數(shù)據(jù)庫(kù)的操作。其作為一個(gè)輕量級(jí)的框架,只提供最基礎(chǔ)的功能,但是可以通過(guò)調(diào)用類庫(kù)進(jìn)行拓展,使后端業(yè)務(wù)邏輯層的編寫更加簡(jiǎn)單,大大減輕了開發(fā)者的負(fù)擔(dān),適用于Web API開發(fā)。
無(wú)論是C/S還是B/S架構(gòu),合理的配置好服務(wù)器端Flask生產(chǎn)環(huán)境極其重要。在進(jìn)行Web API開發(fā)中,我們?cè)谝慌_(tái)安裝了Linux系統(tǒng)服務(wù)器上進(jìn)行了部署。部署可以分成:基礎(chǔ)環(huán)境的配置,采取Nginx+Gunicorn的方式部署。
3.1 Python及Flask的安裝
服務(wù)器上安裝Python,建議使用python3。然后使用pip install Flask 該服務(wù)器上安裝Flask。
3.2 Nginx+Gunicorn的方式部署Flask。
Nginx提供Http代理,反向代理,負(fù)載均衡,web緩存等功能,通過(guò)修改配置文件來(lái)實(shí)現(xiàn)。進(jìn)行反向代理時(shí)根據(jù)自己的需求設(shè)置正則表達(dá)式,采取不同的轉(zhuǎn)發(fā)策略。Nginx對(duì)請(qǐng)求進(jìn)行解析判斷,符合哪一個(gè)正則表達(dá)式,就將請(qǐng)求轉(zhuǎn)發(fā)到哪個(gè)服務(wù)器中。進(jìn)行負(fù)載均衡時(shí)采用加權(quán)輪詢方法進(jìn)行負(fù)載均衡設(shè)置,設(shè)置每個(gè)服務(wù)器的權(quán)重,高效處理客戶端請(qǐng)求。對(duì)服務(wù)器響應(yīng)時(shí)間,傳輸大小等設(shè)置能使服務(wù)器更安全效率的運(yùn)行。
Gunicorn 運(yùn)行Flask項(xiàng)目服務(wù)器中的應(yīng)用。其可以容納 WSGI應(yīng)用,提供Flask工作環(huán)境的依賴,同時(shí)支持多進(jìn)程運(yùn)行,提高了并發(fā)數(shù)。
在基于Flask的Web開發(fā)中,后端使用flask處理前端發(fā)送的請(qǐng)求,進(jìn)行控制器邏輯和業(yè)務(wù)邏輯的開發(fā)。 前端可以使用不同的語(yǔ)言調(diào)用后端開發(fā)的接口,實(shí)現(xiàn)前后端分離開發(fā)。
4.1 接口目錄文件
DAO:主要完成與數(shù)據(jù)層相關(guān)的工作,如數(shù)據(jù)庫(kù)的創(chuàng)建以及對(duì)其增刪改查等操作。
app:主要是一些方法類的實(shí)現(xiàn)。在某一個(gè)具體的類中使用flask_restful對(duì)前端發(fā)送的請(qǐng)求進(jìn)行相關(guān)的讀取等操作。使用reqparse進(jìn)行參數(shù)的解析,成功后,調(diào)用數(shù)據(jù)層中方法進(jìn)行數(shù)據(jù)的相關(guān)操作。最后將數(shù)據(jù)層中返回的數(shù)據(jù)進(jìn)行加工,返回給前端。
server.py:接口的啟動(dòng)文件。當(dāng)接收到前端發(fā)送的請(qǐng)求時(shí),根據(jù)路由規(guī)則相應(yīng)類執(zhí)行。
logs:接口的日志,記錄了接口運(yùn)行時(shí)產(chǎn)生的狀態(tài),config.py:配置文件,如與數(shù)據(jù)庫(kù)的相關(guān)配置等。
4.2 接口測(cè)試
在后端程序完成后使用一些軟件對(duì)接口的功能進(jìn)行測(cè)試。
本文對(duì)Python以及Flask的基本概念進(jìn)行了研究,介紹了如何基于Flask框架配置服務(wù)器環(huán)境以及基于Flask的Web API開發(fā)。我們發(fā)現(xiàn)Flask框架可以簡(jiǎn)單方便的進(jìn)行Web API開發(fā)。作為一個(gè)輕量級(jí)的web架構(gòu),F(xiàn)lask可以快速簡(jiǎn)單的進(jìn)行高質(zhì)量Web的開發(fā),能夠滿足計(jì)算機(jī)技術(shù)日新月異發(fā)展的要求。