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
.
Maklumat uwsgi
telah diperkenalkan secara ringkas di atas Perenggan ini akan memperkenalkan secara ringkas pemasangan dan konfigurasi ringkas uwsgi
.
Pasang uwsgi
, dalam python
, hanya gunakan pip
untuk memasangnya terus, contohnya:
pip3 install 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
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 process
s. 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
Mulakan pelayan
Gunakan terus untuk memulakan konfigurasi, seperti:uwsgi
uwsgi
uwsgi --http :8080
Konfigurasikan pelayan permulaan ini
uwsgi -ini app.ini
Mulakan pelayan json
uwsgi --json app.json
, anda boleh mematikan pelayan dengan menghantar isyarat kepada proses isyarat yang sepadan ialah : uwsgi
. SIGINT
Tutup pelayan
kill -2 uwsgiPID
untuk memulakan uwsgi
yang mudah, mula-mula kami tulis yang berikut demo
Aplikasi 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.']
, 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
. wsgi
, dan kemudian menggunakan main.py
untuk memulakan projek: uwsgi
uwsgi --http :8080 --wsgi-file main.py
, 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
untuk mendapatkan maklumat berikut: curl -v 127.0.0.1:8080/123
本篇文章,很大部分都在描述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个函数,分别是index
和d345
,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
输出的信息,是有有我们定义的函数。
发现没问题后,我们使用curl
再来请求一下路由,验证是否有问题:
如上结果,结果正确输出。
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!