最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)一個簡單的web應(yīng)用框架

 更新時(shí)間:2023年04月27日 08:30:16   作者:真的不能告訴你我的名字  
這篇文章主要為大家介紹了使用python寫一個簡單的web應(yīng)用框架實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

本篇文章所依賴的python環(huán)境是:

如果你還沒了解過什么是WSGI,建議先查詢一下相關(guān)資料,或者查看上一篇文章:

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

這個要區(qū)分2種情況,如果應(yīng)用框架,你沒有參考WSGI標(biāo)準(zhǔn),那么在寫應(yīng)用框架之前,你就必須要定義一套屬于自己的服務(wù)器,當(dāng)然本文不采取這種方式,專業(yè)的事情應(yīng)該專業(yè)的人來做。我們將編寫符合WSGI標(biāo)準(zhǔn)的框架 ,所以僅需要引入符合WSGI的服務(wù)器即可,如果你還不明白什么是WSGI,建議您查看一下相關(guān)資料,或者看一下上一篇介紹WSGI的文章。

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

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

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

uwsgi基本使用

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

安裝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還支持多個格式,例如: xml、yamljson等。

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

uwsgi --ini http://127.0.0.1:8080/myapp.ini

uwsgi常用配置

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

uid=pdudo
gid=pdudoGroups

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

指定項(xiàng)目名稱

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

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

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

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

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

master=True
process=16

設(shè)置對外http地址

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

http=0.0.0.0:8000 

uwsgi啟服和停服

啟動服務(wù)器

直接使用uwsgi即可啟動配置,如:

 uwsgi

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

uwsgi --http :8080

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

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

uwsgi -ini app.ini

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

uwsgi --json app.json

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

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

kill -2 uwsgiPID

啟動一個demo

我們將使用uwsgi來啟動一個簡單的demo,首先我們來編寫符合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.']

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

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

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

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

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

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

寫一個簡單的web應(yīng)用框架

本篇文章,很大部分都在描述uwgi,這是因?yàn)槲覀儗⑦x用其為web服務(wù)器,所以很大的篇章都在描述它,現(xiàn)在,我們已經(jīng)會基本的操作了,我們應(yīng)該來寫一個簡單的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 ,目的是和邏輯代碼分開。上述代碼,我們定義了一個webRoute字典來存儲路由信息,我們想要存儲key為請求的url,值為可被調(diào)用的函數(shù)。

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

application中,會首先獲取請求的路徑,而后再根據(jù)webRoute的值,進(jìn)行匹配,若匹配到了,則執(zhí)行該函數(shù),該函數(shù)必須2個值,第一個是狀態(tài)碼,第二個是響應(yīng)報(bào)文主體。 我們將根據(jù)返回的信息,組合成狀態(tài)碼以及響應(yīng)頭,通過調(diào)用start_response函數(shù),將2個參數(shù)攜帶上,最后return一個報(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文件,定義一個變量app用于引用myWeb.application函數(shù)。接著,我們便定義了2個函數(shù),分別是indexd345,2個函數(shù)的共同之處是返回了一個元組,元組前者是int類型,將用于狀態(tài)碼,后則是str類型,將用于返回響應(yīng)報(bào)文主體。

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

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

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

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

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

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

發(fā)現(xiàn)沒問題后,我們使用curl再來請求一下路由,驗(yàn)證是否有問題:

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

總結(jié)

上一篇文章,我們初步了解了什么是WSGI,這是一個很有意思的東西,它是一個標(biāo)準(zhǔn),我們僅需要按照它的標(biāo)準(zhǔn),來寫一個web應(yīng)用,我們就可以放到任何符合WSGI的服務(wù)器上,不論是上一篇提及的wsgiref還是本篇文章所講述的uswgi都可以來調(diào)用我們的框架并且運(yùn)行。最后我們也寫了一個非常簡單的應(yīng)用框架。

以上就是python|寫一個簡單的web應(yīng)用框架的詳細(xì)內(nèi)容,更多關(guān)于python web應(yīng)用框架的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于pandas-profiling的降級之旅

    關(guān)于pandas-profiling的降級之旅

    這篇文章主要介紹了關(guān)于pandas-profiling的降級之旅,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Python使用ffmpy將amr格式的音頻轉(zhuǎn)化為mp3格式的例子

    Python使用ffmpy將amr格式的音頻轉(zhuǎn)化為mp3格式的例子

    今天小編就為大家分享一篇Python使用ffmpy將amr格式的音頻轉(zhuǎn)化為mp3格式的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python檢測兩個文本文件相似性的三種方法

    Python檢測兩個文本文件相似性的三種方法

    檢測兩個文本文件的相似性是一個常見的任務(wù),可以用于文本去重、抄襲檢測等場景,Python 提供了多種方法來實(shí)現(xiàn)這一功能,x下面小編就來簡單介紹一下吧
    2025-03-03
  • Python實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼詳解

    Python實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼詳解

    驗(yàn)證碼作為一種自然人的機(jī)器人的判別工具,被廣泛的用于各種防止程序做自動化的場景中。傳統(tǒng)的字符型驗(yàn)證安全性已經(jīng)名存實(shí)亡的情況下,各種新型的驗(yàn)證碼如雨后春筍般涌現(xiàn),今天給大家分享一篇Python實(shí)現(xiàn)滑塊驗(yàn)證碼
    2022-05-05
  • Python中窗口操作的完整教程

    Python中窗口操作的完整教程

    在使用 Python 進(jìn)行窗口操作時(shí),可以執(zhí)行各種任務(wù),如最大化、最小化、置頂窗口,本文將詳細(xì)介紹這些操作,并提供豐富的示例代碼,希望可以更好地幫助大家了解如何利用 Python 操縱窗口
    2023-11-11
  • python os模塊常用的29種方法使用詳解

    python os模塊常用的29種方法使用詳解

    這篇文章主要介紹了python os模塊常用的29種方法使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python 內(nèi)存管理機(jī)制全面分析

    Python 內(nèi)存管理機(jī)制全面分析

    這篇文章主要介紹了Python 內(nèi)存管理機(jī)制全面分析,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • 用Python中的__slots__緩存資源以節(jié)省內(nèi)存開銷的方法

    用Python中的__slots__緩存資源以節(jié)省內(nèi)存開銷的方法

    這篇文章主要介紹了用Python中的__slots__通過緩存資源的方式以節(jié)省內(nèi)存開銷的方法,且示例代碼非常簡單,需要的朋友可以參考下
    2015-04-04
  • python異步編程之a(chǎn)syncio低階API的使用詳解

    python異步編程之a(chǎn)syncio低階API的使用詳解

    asyncio中低階API的種類很多,涉及到開發(fā)的5個方面,這篇文章主要為大家詳細(xì)介紹了這些低階API的具體使用,感興趣的小伙伴可以學(xué)習(xí)一下
    2024-01-01
  • Python格式化輸出的幾種匯總

    Python格式化輸出的幾種匯總

    這篇文章主要介紹了Python格式化輸出的幾種匯總,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論

济阳县| 呈贡县| 砚山县| 贺兰县| 永昌县| 班玛县| 东明县| 凭祥市| 肇东市| 常德市| 安康市| 新民市| 滨海县| 泾阳县| 北票市| 宁夏| 石河子市| 辽阳县| 彰武县| 古交市| 溧水县| 靖州| 富源县| 南江县| 清远市| 淳安县| 彝良县| 樟树市| 礼泉县| 通榆县| 中山市| 井陉县| 嘉兴市| 会理县| 宁河县| 高安市| 鄂州市| 吉林省| 新建县| 红安县| 临朐县|