五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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)遵守國家法律
兴化市| 庄河市| 宽城| 黄山市| 苏尼特右旗| 桐柏县| 商都县| 丹江口市| 万宁市| 噶尔县| 大化| 诸暨市| 西安市| 格尔木市| 宁晋县| 二连浩特市| 泰安市| 房产| 泊头市| 尚志市| 根河市| 莲花县| 招远市| 梁平县| 南漳县| 利辛县| 当涂县| 孙吴县| 广灵县| 吉隆县| 湘乡市| 兰考县| 克什克腾旗| 左权县| 阿城市| 通化市| 青海省| 道真| 阳春市| 昔阳县| 宜君县|