亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Python實現一個簡單的Web應用框架

發布時間:2023-05-08 11:20:32 來源:億速云 閱讀:107 作者:zzz 欄目:編程語言

本文小編為大家詳細介紹“怎么使用Python實現一個簡單的Web應用框架”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么使用Python實現一個簡單的Web應用框架”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    寫應用框架需要寫底層服務器

    這個要區分2種情況,如果應用框架,你沒有參考WSGI標準,那么在寫應用框架之前,你就必須要定義一套屬于自己的服務器,當然本文不采取這種方式,專業的事情應該專業的人來做。我們將編寫符合WSGI標準的框架 ,所以僅需要引入符合WSGI的服務器即可,

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

    • uwsgi:該服務器是使用c編寫的,具有廣泛的應用場景的應用程序容器。除了支持WSGI外,還支持其他協議,例如HTTPWebSocket等等。不僅如此,它還提供了多進程、多線程、協程、異步IO等多種運行模式,還提供了很多高級功能,如內存共享、定時任務、快速熱部署等。

    • waitress:該服務器是使用python寫的,是一個很輕量級、非常可靠、支持多線程的WSGI服務器,可以用來運行Python Web應用。

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

    uwsgi基本使用

    上面已經簡單介紹了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內容如下:

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

    不僅如此,uwsgi還支持多個格式,例如: xmlyamljson等。

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

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

    指定啟動uwsgi進程的用戶和用戶組

    uid=pdudo
    gid=pdudoGroups

    上述啟動uwsgi進程使用pdudo用戶,而組的話是使用pdudoGroups

    指定項目名稱

    使用project來指定項目名稱,如project=pdudoProject

    指定進程家目錄

    使用base來指定進程家目錄,如base=/home/pdudo/

    設置進程數

    要設置進程數,需要先將master設置為True, 而后再設置process個數,一把建議進程數不超過cpu核數,例如:

    master=True
    process=16

    設置對外http地址

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

    http=0.0.0.0:8000
    uwsgi啟服和停服

    啟動服務器

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

     uwsgi

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

    uwsgi --http :8080

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

    ini中讀取配置啟動服務器

    uwsgi -ini app.ini

    json中讀取配置啟動服務器

    uwsgi --json app.json

    uwsgi中,可以通過向進程發送信號的方式,來關閉服務器,對應的信號為: SIGINT

    關閉服務器

    kill -2 uwsgiPID
    啟動一個demo

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

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

    如果這塊,不太明白的話,可以看一下wsgi標準。

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

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

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

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

    怎么使用Python實現一個簡單的Web應用框架

    寫一個簡單的web應用框架

    本篇文章,很大部分都在描述uwgi,這是因為我們將選用其為web服務器,所以很大的篇章都在描述它,現在,我們已經會基本的操作了,我們應該來寫一個簡單的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,值為可被調用的函數。

    我們為此專門寫了一個Routes函數,該函數將傳入2個值,第一個是請求的url,第二個是可被調用的函數。

    application中,會首先獲取請求的路徑,而后再根據webRoute的值,進行匹配,若匹配到了,則執行該函數,該函數必須2個值,第一個是狀態碼,第二個是響應報文主體。 我們將根據返回的信息,組合成狀態碼以及響應頭,通過調用start_response函數,將2個參數攜帶上,最后return一個報文主體。

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

    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函數。接著,我們便定義了2個函數,分別是indexd345,2個函數的共同之處是返回了一個元組,元組前者是int類型,將用于狀態碼,后則是str類型,將用于返回響應報文主體。

    最后,我們通過myWeb.Routes將2個函數于路由串聯起來,分別對應為:

    • /index: index函數。

    • /123: d456函數

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

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

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

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

    怎么使用Python實現一個簡單的Web應用框架

    發現沒問題后,我們使用curl再來請求一下路由,驗證是否有問題:

    怎么使用Python實現一個簡單的Web應用框架

    如上結果,結果正確輸出。

    讀到這里,這篇“怎么使用Python實現一個簡單的Web應用框架”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    大化| 武平县| 高邮市| 宁陕县| 洮南市| 新泰市| 榕江县| 布拖县| 洛川县| 如皋市| 阜城县| 江北区| 石林| 肥东县| 措美县| 铁力市| 略阳县| 凉城县| 蓬安县| 达尔| 古交市| 吴桥县| 南通市| 固镇县| 温州市| 嵊泗县| 通海县| 柞水县| 辉南县| 甘谷县| 南郑县| 十堰市| 西城区| 武鸣县| 百色市| 海城市| 康马县| 鄂尔多斯市| 蕲春县| 岢岚县| 宁南县|