Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan rangka kerja aplikasi web mudah menggunakan Python?

Bagaimana untuk melaksanakan rangka kerja aplikasi web mudah menggunakan Python?

WBOY
WBOYke hadapan
2023-05-07 13:19:081902semak imbas

    Adakah anda perlu menulis pelayan asas semasa menulis rangka kerja aplikasi

    Terdapat dua situasi untuk dibezakan jika anda tidak merujuk kepada WSGI standard untuk rangka kerja aplikasi, maka Sebelum menulis rangka kerja aplikasi, anda mesti menentukan set pelayan anda sendiri, artikel ini tidak menggunakan pendekatan profesional ini. Kami akan menulis rangka kerja yang mematuhi piawaian WSGI, jadi kami hanya perlu memperkenalkan pelayan yang mematuhi piawaian WSGI

    Jadi apakah pelayan wsgi itu? Berikut ialah dua contoh mudah:

    • uwsgi: Pelayan ini ditulis menggunakan c dan merupakan bekas aplikasi dengan pelbagai senario aplikasi. Selain menyokong WSGI, protokol lain juga disokong, seperti HTTP, WebSocket, dsb. Bukan itu sahaja, ia juga menyediakan berbilang mod operasi seperti berbilang proses, berbilang benang, coroutine, IO tak segerak, dsb., dan juga menyediakan banyak fungsi lanjutan, seperti perkongsian memori, tugas berjadual, penggunaan panas yang pantas, dsb.

    • waitress: Pelayan ini ditulis menggunakan python Ia adalah pelayan WSGI yang sangat ringan, sangat boleh dipercayai, berbilang benang yang boleh digunakan untuk menjalankan Python Web. Mohon.

    Rangka kerja web artikel kami menggunakan uswgi.

    Penggunaan asas uwsgi

    Maklumat uwsgi telah diperkenalkan secara ringkas di atas Perenggan ini akan memperkenalkan secara ringkas pemasangan dan konfigurasi ringkas uwsgi.

    Pasang uwsgi

    Pasang uwsgi, dalam python, hanya gunakan pip untuk memasangnya terus, contohnya:

     pip3 install uwsgi

    Konfigurasikan uwsgi

    uwsgi menyokong berbilang format dan boleh digunakan terus pada baris arahan, contohnya:

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

    Anda juga boleh menulis perkara di atas ke dalam arahan, contohnya:

    uwsgi --ini myapp.ini

    di mana kandungan myapp.ini adalah seperti berikut:

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

    Bukan itu sahaja, uwsgi juga menyokong berbilang format, seperti: xml, yaml, json, dsb.

    Fail konfigurasi juga boleh dalam bentuk url, contohnya:

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

    uwsgi konfigurasi biasa

    Nyatakan pengguna dan kumpulan pengguna yang memulakan uwsgi proses

    uid=pdudo
    gid=pdudoGroups

    Proses permulaan uwsgi yang disebutkan di atas menggunakan pengguna pdudo dan untuk kumpulan, gunakan pdudoGroups

    untuk menentukan nama projek

    Gunakan project untuk menentukan nama projek, seperti project=pdudoProject

    Nyatakan direktori utama proses

    Gunakan base untuk menentukan direktori utama proses, seperti base=/home/pdudo/

    Tetapkan bilangan proses

    Untuk menetapkan bilangan proses , anda perlu menetapkan master kepada True dahulu, dan kemudian tetapkan bilangan processs. Ia disyorkan bahawa bilangan proses tidak melebihi bilangan cpu teras, contohnya:

    master=True
    process=16

    menetapkan alamat http luaran

    Jika anda ingin mendedahkan kepada dunia luar, ada terdapat banyak konfigurasi, seperti socket, dsb., tetapi yang paling biasa digunakan ialah http Kita boleh menghalakannya terus ke alamat soket, contohnya:

    http=0.0.0.0:8000

    uwsgi startup and shutdown

    Mulakan pelayan

    Gunakan

    terus untuk memulakan konfigurasi, seperti:uwsgi

     uwsgi

    Jika anda tidak mahu menetapkannya Konfigurasi fail boleh dimulakan terus dari baris arahan, seperti:

    uwsgi --http :8080

    Jika anda ingin memulakan melalui fail konfigurasi, anda boleh menggunakan pilihan konfigurasi beban, seperti:

    Baca dari

    Konfigurasikan pelayan permulaan ini

    uwsgi -ini app.ini

    Baca konfigurasi daripada

    Mulakan pelayan json

    uwsgi --json app.json

    Dalam

    , anda boleh mematikan pelayan dengan menghantar isyarat kepada proses isyarat yang sepadan ialah : uwsgi. SIGINT

    Tutup pelayan

    kill -2 uwsgiPID

    Mulakan demo

    Kami akan menggunakan

    untuk memulakan uwsgi yang mudah, mula-mula kami tulis yang berikut demoAplikasi standard, sebagai contoh, WSGI kami ialah: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.']

    Dalam kod di atas, kami mentakrifkan fungsi

    , parameter formal ialah application dan environ, yang pertama ialah Kamus, diikuti dengan fungsi Dalam start_response, anda perlu menentukan status dan frasa permintaan, serta pengepala respons. Kemudian untuk memanggil fungsi application, anda perlu memasukkan pengepala status dan respons. Akhirnya, badan mesej akan dikembalikan. start_response

    Jika anda tidak memahami perkara ini, anda boleh melihat pada piawaian

    . wsgi

    Kami menyimpan kod di atas sebagai

    , dan kemudian menggunakan main.py untuk memulakan projek: uwsgi

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

    Kod di atas menggunakan baris arahan untuk memulakan

    , nyatakan uwsgi port ialah http, dan kad rangkaian pemantauan tidak dinyatakan secara lalai ialah semua kad rangkaian Daripada 8080, aplikasi swgi-file yang kami tulis sendiri akan ditentukan. Selepas wsgi

    dimulakan, kita boleh menggunakan

    untuk mendapatkan maklumat berikut: curl -v 127.0.0.1:8080/123

    Bagaimana untuk melaksanakan rangka kerja aplikasi web mudah menggunakan Python?

    写一个简单的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输出的信息,是有有我们定义的函数。

    Bagaimana untuk melaksanakan rangka kerja aplikasi web mudah menggunakan Python?

    发现没问题后,我们使用curl再来请求一下路由,验证是否有问题:

    Bagaimana untuk melaksanakan rangka kerja aplikasi web mudah menggunakan Python?

    如上结果,结果正确输出。

    Atas ialah kandungan terperinci Bagaimana untuk melaksanakan rangka kerja aplikasi web mudah menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam