最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Python簡單輕量級(jí)Web Server模塊Bottle

2020-09-08 11:53 作者:象喻  | 我要投稿


Bottle

提示:使用此WEB服務(wù)器模塊需要有基本的HTTP知識(shí)

  簡單、輕量級(jí)指的是:上手不難、容易使用、模塊不大還能完成一般Web服務(wù)器的功能。Bottle是Python平臺(tái)的輕量級(jí)Web Server(準(zhǔn)確的說是HTTP Server)模塊,沒有其它依賴庫,支持Post/Get提交數(shù)據(jù)、上傳文件等功能,還支持簡單的網(wǎng)頁模板?;咎幱诔S霉δ芏加校總€(gè)方面都跟專業(yè)有很大差距的情況,所以它的定位就不是取代專業(yè)Web Server的。

  Bottle官方網(wǎng)址 bottlepy.org?? 英文文檔全面。配置語法雖多但都不難

  我自己拿Bottle是用來代替 tkinter 界面。在Python中如果編寫一個(gè)TK界面,在處理大量列表數(shù)據(jù)時(shí),界面拉伸總需要改來改去的。而且界面越高級(jí),tkinter越繁雜,都不如直接用TCL/TK畫界面再調(diào)用Python了。但這樣處理Python的返回結(jié)果又很麻煩,所以干脆就換Web界面來管理Python程序。Bottle在小局域網(wǎng)幾個(gè)人用沒問題,沒做過負(fù)載測(cè)試(看Bottle源碼,使用的是threading線程)。

  Bottle的使用方法跟Java平臺(tái)的JLhttp很像(Java輕量級(jí)Web伺服器),但是我感覺JLhttp在國內(nèi)好像用的人也不多,如果你沒聽說過就把這句忽略吧。

import bottle

@bottle.route('/')
def 首頁():
??? return "Hello World!"


bottle.run(host='localhost', port=8080, debug=True)

解釋一下上面幾段代碼的含義,導(dǎo)入bottle模塊。Bottle使用了@裝飾器語法來進(jìn)行配置,從語法角度來說增加了初學(xué)者的負(fù)擔(dān)(畢竟不像Java注解那么多),但bottle這里很節(jié)省代碼量。

@bottle.route('/') 表示接下來的自定義函數(shù)負(fù)責(zé)處理網(wǎng)站"/"根目錄的請(qǐng)求。網(wǎng)站和HTTP基礎(chǔ)知識(shí)我就不解釋了。

def 首頁():? 自定義函數(shù),函數(shù)名隨意起,懶得寫注釋,我用bottle時(shí)所有的函數(shù)名都是中文寫明用途。

??? return "Hello World!"?? 這里表示返回給網(wǎng)頁的內(nèi)容,正常應(yīng)該是html代碼。

上面三句體現(xiàn)了Bottle的模式:@裝飾器聲明哪些網(wǎng)址(網(wǎng)站路徑)要被處理。緊接的def函數(shù)處理相關(guān)的網(wǎng)址;處理完畢后return結(jié)果。

bottle.run(host='localhost', port=8080, debug=True)? 網(wǎng)站配置完畢后,啟動(dòng)bottle伺服器。

host表示接受的IP地址(localhost表示本機(jī))。port表示綁定的端口。debug表示有問題時(shí)顯示詳細(xì)錯(cuò)誤。


一些使用例子

靜態(tài)網(wǎng)頁

return bottle.static_file('index.html', 靜態(tài)頁所在的文件夾路徑)


靜態(tài)文件自動(dòng)映射

@bottle.route('/<filepath:path>')
def 靜態(tài)文件自動(dòng)映射(filepath):
??? return bottle.static_file(filepath, 文件夾路徑)

這是自動(dòng)映射網(wǎng)頁的靜態(tài)內(nèi)容,比如html網(wǎng)頁、圖片、js腳本和css等等。一般網(wǎng)頁都需要很多靜態(tài)內(nèi)容,如果都像上面那么映射就沒法活了。

特別需要注意的是,如果有其它子目錄映射,根目錄的靜態(tài)文件映射必須放在子目錄映射之后,否則會(huì)攔截子目錄的映射。


接受Post信息

@bottle.route('/posttest', method='POST')
def 接收信息測(cè)試():
??? if not bottle.request.forms.get('postxinxxi'):
??????? return "信息為空!"

@表示在posttest網(wǎng)址上接收網(wǎng)頁發(fā)來的post信息。注意,此時(shí)直接訪問posttest網(wǎng)址是無效的。

POST數(shù)據(jù)通過bottle.request.forms.get('postxinxxi')來取得,本例中網(wǎng)頁端發(fā)來的數(shù)據(jù)ID是postxinxxi。


雙裝飾器,即接受數(shù)據(jù)也可以訪問

@bottle.route('/Ptest')
@bottle.route('/Ptest', method='POST')

def XXXX……

上面提到接收POST數(shù)據(jù)的網(wǎng)址不能直接訪問,如果想要一個(gè)網(wǎng)頁即可以訪問也可以接收數(shù)據(jù),就需要用雙裝飾器。


文件上傳(借用官方例子)

@route('/upload', method='POST')
def 文件上傳并通過后綴擴(kuò)展名驗(yàn)證上傳類型():
??? upload = request.files.get('upload')
??? filename, 后綴擴(kuò)展名 = os.path.splitext(upload.filename)
????if 后綴擴(kuò)展名 not in ('.png','.jpg','.jpeg'):
????????return '上傳文件類型錯(cuò)誤'

??? upload.save(保存文件的路徑bottle自動(dòng)在路徑后追加文件名)
????return '上傳成功'

比官方例子有精簡,突出了上傳部分,獲取上傳內(nèi)容通過request.files.get實(shí)現(xiàn)。其它重點(diǎn)部分都改成中文放在代碼里了,希望你們能看懂。此外關(guān)于request的類型,官方文檔里有詳細(xì)的列表:

網(wǎng)頁模板

bottle.TEMPLATE_PATH = 模板目錄

先需要設(shè)定模板目錄,然后在def自定義函數(shù)中return部分指定模板

return bottle.template('模板文件名,不用寫后綴', zidingyi='自定義的模板字段')

模板部分要細(xì)說有點(diǎn)長,我大概介紹下流程:先創(chuàng)建HTML文件,然后在HTML需要?jiǎng)討B(tài)變換的部分添加{{!zidingyi}}這樣的自定義字段。在Python程序里計(jì)算自定義字段的最終值,并在return時(shí),指定剛才建立的模板文件名,并且把最終值賦值給zidingyi,模板顯示的時(shí)候{{!zidingyi}}那里就會(huì)變成Python給的最終值。

此外模板還支持一部分Python語法,詳細(xì)用法看官方文檔吧。教程是漸進(jìn)式的,每看一部分就可以使用一些功能。


更多的Cookie、插件等內(nèi)容我沒有用到,請(qǐng)去官方文檔查看。文檔雖然不是面面俱到但都是漸進(jìn)式的,而且每部分都配合代碼例子,對(duì)照觀看還是很容易的。


Python簡單輕量級(jí)Web Server模塊Bottle的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
嘉义县| 大荔县| 梓潼县| 麻江县| 日喀则市| 达日县| 临猗县| 余庆县| 兴隆县| 石家庄市| 怀宁县| 阳朔县| 抚顺市| 宁化县| 岑巩县| 石棉县| 黄冈市| 婺源县| 青川县| 定襄县| 杂多县| 丹阳市| 泾阳县| 独山县| 东阿县| 扎鲁特旗| 尖扎县| 浦北县| 新余市| 固始县| 讷河市| 东丰县| 长阳| 曲麻莱县| 长沙市| 介休市| 宜州市| 遵化市| 连州市| 同心县| 扶风县|