真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web應(yīng)用框架

本文小編為大家詳細(xì)介紹“怎么使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web應(yīng)用框架”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“怎么使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web應(yīng)用框架”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

創(chuàng)新互聯(lián)建站的客戶來(lái)自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜?,從?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。專業(yè)領(lǐng)域包括網(wǎng)站建設(shè)、成都網(wǎng)站制作、電商網(wǎng)站開(kāi)發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開(kāi)發(fā)。

    寫應(yīng)用框架需要寫底層服務(wù)器

    這個(gè)要區(qū)分2種情況,如果應(yīng)用框架,你沒(méi)有參考WSGI標(biāo)準(zhǔn),那么在寫應(yīng)用框架之前,你就必須要定義一套屬于自己的服務(wù)器,當(dāng)然本文不采取這種方式,專業(yè)的事情應(yīng)該專業(yè)的人來(lái)做。我們將編寫符合WSGI標(biāo)準(zhǔn)的框架 ,所以僅需要引入符合WSGI的服務(wù)器即可,

    那么有哪些wsgi服務(wù)器呢? 這里簡(jiǎn)單列舉2個(gè)

    • uwsgi:該服務(wù)器是使用c編寫的,具有廣泛的應(yīng)用場(chǎng)景的應(yīng)用程序容器。除了支持WSGI外,還支持其他協(xié)議,例如HTTP、WebSocket等等。不僅如此,它還提供了多進(jìn)程、多線程、協(xié)程、異步IO等多種運(yùn)行模式,還提供了很多高級(jí)功能,如內(nèi)存共享、定時(shí)任務(wù)、快速熱部署等。

    • waitress:該服務(wù)器是使用python寫的,是一個(gè)很輕量級(jí)、非??煽?、支持多線程的WSGI服務(wù)器,可以用來(lái)運(yùn)行Python Web應(yīng)用。

    我們本篇文章的web框架采用的就是uswgi。

    uwsgi基本使用

    上面已經(jīng)簡(jiǎn)單介紹了uwsgi的信息,本段落會(huì)簡(jiǎn)單介紹一下uwsgi安裝和簡(jiǎn)單的配置。

    安裝uwsgi

    安裝uwsgi,在python中,直接使用pip安裝即可,例如:

     pip3 install uwsgi
    配置uwsgi

    uwsgi支持多種格式,可以直接在命令行上,例如:

    uwsgi --http :8080 --wsgi-file myapp.py --callable app

    還可以將上述寫到命令中,例如:

    uwsgi --ini myapp.ini

    其中myapp.ini內(nèi)容如下:

    [uwsgi]
    http = :8080
    wsgi-file = myapp.py
    callable = app

    不僅如此,uwsgi還支持多個(gè)格式,例如: xml、yaml、json等。

    配置文件也可以是url的形式,例如:

    uwsgi --ini http://127.0.0.1:8080/myapp.ini
    uwsgi常用配置

    指定啟動(dòng)uwsgi進(jìn)程的用戶和用戶組

    uid=pdudo
    gid=pdudoGroups

    上述啟動(dòng)uwsgi進(jìn)程使用pdudo用戶,而組的話是使用pdudoGroups

    指定項(xiàng)目名稱

    使用project來(lái)指定項(xiàng)目名稱,如project=pdudoProject

    指定進(jìn)程家目錄

    使用base來(lái)指定進(jìn)程家目錄,如base=/home/pdudo/

    設(shè)置進(jìn)程數(shù)

    要設(shè)置進(jìn)程數(shù),需要先將master設(shè)置為True, 而后再設(shè)置process個(gè)數(shù),一把建議進(jìn)程數(shù)不超過(guò)cpu核數(shù),例如:

    master=True
    process=16

    設(shè)置對(duì)外http地址

    若想對(duì)外,有很多中配置,如socket等,但是一般用的最多的還是http,我們直接指向一個(gè)套接字地址即可,例如:

    http=0.0.0.0:8000
    uwsgi啟服和停服

    啟動(dòng)服務(wù)器

    直接使用uwsgi即可啟動(dòng)配置,如:

     uwsgi

    若不想設(shè)置配置文件,直接可以在命令行啟動(dòng),如:

    uwsgi --http :8080

    若想通過(guò)配置文件啟動(dòng),則可以使用加載配置選項(xiàng)即可,例如:

    ini中讀取配置啟動(dòng)服務(wù)器

    uwsgi -ini app.ini

    json中讀取配置啟動(dòng)服務(wù)器

    uwsgi --json app.json

    uwsgi中,可以通過(guò)向進(jìn)程發(fā)送信號(hào)的方式,來(lái)關(guān)閉服務(wù)器,對(duì)應(yīng)的信號(hào)為: SIGINT

    關(guān)閉服務(wù)器

    kill -2 uwsgiPID
    啟動(dòng)一個(gè)demo

    我們將使用uwsgi來(lái)啟動(dòng)一個(gè)簡(jiǎn)單的demo,首先我們來(lái)編寫符合WSGI標(biāo)準(zhǔn)的應(yīng)用,例如,我們的demo為:

    def application(environ, start_response):
        status = "200 OK"
        headers = [("Content-type","text/html"),("Server","pdudo_web_sites")]
        start_response(status,headers)
        return [b'Hello, pdudos.']

    上述代碼,我們定義了一個(gè)函數(shù)application,形參為environ以及start_response,前則是一個(gè)字典,后則是一個(gè)函數(shù),在application中,需要定義請(qǐng)求的狀態(tài)和短語(yǔ),以及響應(yīng)頭。 而后調(diào)用start_response函數(shù),需要傳入狀態(tài)和響應(yīng)頭。最后將返回一個(gè)報(bào)文主體。

    如果這塊,不太明白的話,可以看一下wsgi標(biāo)準(zhǔn)。

    我們將這個(gè)上述代碼保存為main.py,而后使用uwsgi來(lái)啟動(dòng)該項(xiàng)目:

    uwsgi --http :8080 --wsgi-file main.py

    上述代碼,使用的命令行的方式來(lái)啟動(dòng)uwsgi,指定http端口為8080,監(jiān)聽(tīng)的網(wǎng)卡沒(méi)有指定,默認(rèn)是所有網(wǎng)卡,從swgi-file將指定我們自己寫的wsgi應(yīng)用程序。

    啟動(dòng)后,我們使用curl -v 127.0.0.1:8080/123可以得到如下信息:

    怎么使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web應(yīng)用框架

    寫一個(gè)簡(jiǎn)單的web應(yīng)用框架

    本篇文章,很大部分都在描述uwgi,這是因?yàn)槲覀儗⑦x用其為web服務(wù)器,所以很大的篇章都在描述它,現(xiàn)在,我們已經(jīng)會(huì)基本的操作了,我們應(yīng)該來(lái)寫一個(gè)簡(jiǎn)單的web框架了。

    我們寫的web框架如下:

    webRoute = {}
    def application(environ, start_response):
        path = environ['PATH_INFO']
        if webRoute[path]:
            func = webRoute[path]
            code , body = func(environ)
            status = "%d OK" % (code)
            headers = [("Content-type","text/html"),("Server","pdudo_web_sites")]
            start_response(status,headers)
            return [body.encode()]
    def Routes(path,func):
        print("add routes: %s %s" %(path,func))
        webRoute[path] = func

    哎,短短17行,我們基本的框架就寫完了,厲害吧,我們將次代碼保存到本地,命名為myWeb.py ,目的是和邏輯代碼分開(kāi)。上述代碼,我們定義了一個(gè)webRoute字典來(lái)存儲(chǔ)路由信息,我們想要存儲(chǔ)key為請(qǐng)求的url,值為可被調(diào)用的函數(shù)。

    我們?yōu)榇藢iT寫了一個(gè)Routes函數(shù),該函數(shù)將傳入2個(gè)值,第一個(gè)是請(qǐng)求的url,第二個(gè)是可被調(diào)用的函數(shù)。

    application中,會(huì)首先獲取請(qǐng)求的路徑,而后再根據(jù)webRoute的值,進(jìn)行匹配,若匹配到了,則執(zhí)行該函數(shù),該函數(shù)必須2個(gè)值,第一個(gè)是狀態(tài)碼,第二個(gè)是響應(yīng)報(bào)文主體。 我們將根據(jù)返回的信息,組合成狀態(tài)碼以及響應(yīng)頭,通過(guò)調(diào)用start_response函數(shù),將2個(gè)參數(shù)攜帶上,最后return一個(gè)報(bào)文主體。

    接下里,我們就可以寫我們的邏輯代碼了,我們編寫如下:

    import myWeb
    app = myWeb.application
    def index(*args):
        return (200,"hello world")
    def d345(*args):
        return (400,"dasda")
    myWeb.Routes("/index",index)
    myWeb.Routes("/123",d345)

    我們將上述代碼保存到本地,命名為main.py。

    上述代碼,我們先引用了剛剛保存到本地的myWeb文件,定義一個(gè)變量app用于引用myWeb.application函數(shù)。接著,我們便定義了2個(gè)函數(shù),分別是indexd345,2個(gè)函數(shù)的共同之處是返回了一個(gè)元組,元組前者是int類型,將用于狀態(tài)碼,后則是str類型,將用于返回響應(yīng)報(bào)文主體。

    最后,我們通過(guò)myWeb.Routes將2個(gè)函數(shù)于路由串聯(lián)起來(lái),分別對(duì)應(yīng)為:

    • /index: index函數(shù)。

    • /123: d456函數(shù)

    我們應(yīng)用框架就寫完了,我們需要使用uwsgi來(lái)啟動(dòng)一下我們寫的框架:

    uwsgi --http :8080 --wsgi-file main.py --callable app

    這里新增了一個(gè)配置項(xiàng),callable該參數(shù)的意思是,指定應(yīng)用起始函數(shù),默認(rèn)是application,如果不是這個(gè)名稱,則需要額外指定,我們定義的是app,所以需要將其指定為app

    啟動(dòng)后,我們可以觀察一下,我們之前在框架Routes函數(shù)中,我們打印了路由和函數(shù)的信息,我們可以看下uwsgi輸出的信息,是有有我們定義的函數(shù)。

    怎么使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web應(yīng)用框架

    發(fā)現(xiàn)沒(méi)問(wèn)題后,我們使用curl再來(lái)請(qǐng)求一下路由,驗(yàn)證是否有問(wèn)題:

    怎么使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web應(yīng)用框架

    如上結(jié)果,結(jié)果正確輸出。

    讀到這里,這篇“怎么使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web應(yīng)用框架”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


    網(wǎng)站標(biāo)題:怎么使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web應(yīng)用框架
    標(biāo)題URL:http://weahome.cn/article/gcghoj.html

    其他資訊

    在線咨詢

    微信咨詢

    電話咨詢

    028-86922220(工作日)

    18980820575(7×24)

    提交需求

    返回頂部