Trong bài bác cuối của loạt bài Lập trình web với Python, bọn họ sẽ bàn đến chuẩn chỉnh WSGI (Web vps Gateway Interface).
Bạn đang xem: Wsgi là gì
WSGI, không giống với HTTP, CGI và FCGI, không hẳn là chuẩn chỉnh giao thức liên hệ (communication protocol) mà lại là chuẩn chỉnh giao tiếp (standard interface) thân ứng dụng máy chủ (server) và những khung xương (framework) hay các ứng dụng website (web application). Mẫu hóa nhưng mà nói, WSGI nằm phía trên HTTP/CGI/FCGI và phía dưới ứng dụng thiệt sự. Lớp WSGI góp lớp áp dụng trao thay đổi với lớp máy chủ theo một biện pháp khả chuyển, tức là một áp dụng WSGI hoàn toàn có thể chạy tương đồng trên sản phẩm công nghệ chủ khác biệt như Apache, NGINX, tuyệt Lighttpd, sử dụng các giao thức không giống nhau như CGI, FCGI, SCGI, hay AJP. Nói một phương pháp khác, WSGI "che" phương pháp liên lạc qua mạng cùng tạo đk cho ứng dụng web tập trung vào câu hỏi xử lý các vấn đề quan trọng hơn.
Một vận dụng WSGI là một đối tượng người tiêu dùng gọi được (callable object). Một đối tượng gọi được rất có thể là một hàm, một phương thức, hoặc một đối tượng có hàm __call__. Đối tượng call được này cần nhận hai tham số là environ cùng start_response. Thông số environ là một từ điển với các khóa theo chuẩn CGI và một vài khóa đặc trưng mà máy chủ WSGI rất có thể truyền mang lại ứng dụng. start_response là một đối tượng người dùng gọi được do sever WSGI hỗ trợ cho vận dụng để ứng dụng bước đầu việc truyền dữ liệu cho sever WSGI. start_response dìm hai tham số thuộc dòng trạng thái trả lời (status string) và một list bộ-2 (list of 2-tuple) những đầu mục (header), từng bộ-2 bao hàm tên và quý hiếm của đầu mục. Quý giá trả về của áp dụng WSGI là 1 trong bộ khả lặp (iterable) sinh ra câu chữ sẽ được máy chủ WSGI để lại cho sever HTTP hoặc trình duyệt. Ví dụ:
def simple_app(environ, start_response): """Simplest possible application object""" status = '200 OK' response_headers = <('Content-type', 'text/plain')> start_response(status, response_headers) return <'Hello world!
'>
Đầu tiên, ta tùy chỉnh chuỗi tinh thần là 200 OK, xác minh đầu mục Content-type là text/plain rồi điện thoại tư vấn start_response với các thông tin như vậy. Quý giá trả về là 1 danh sách với phần tử duy độc nhất là chuỗi Hello world!n. Ta cũng hoàn toàn có thể trả về chuỗi Hello world! trực tiếp mà lại không bắt buộc đặt nó vào trong một danh sách vì phiên bản thân một chuỗi cũng chính là một đối tượng người tiêu dùng khả lặp. Mặc dù nhiên, làm bởi vậy không được khuyến khích do khi đó sever WSGI vẫn phải thao tác làm việc nhiều hơn, lặp qua từng ký kết tự H, e, l, l, o... Thay vì lấy trực tiếp chuỗi trả lời.
Chúng ta vẫn viết lại ứng dụng đếm số lần truy cập như vào kỳ trước theo mô hình một vận dụng WSGI. Chúng ta sẽ chế tạo ra tập tin C:Program FilesApache Software FoundationApache2.2fcgi-binhello2.py với câu chữ như sau:
#!C:Python26python.exefrom flup.server import fcgiclass HelloApp(object): def __init__(self): self.count = 0 def __call__(self, environ, start_response): self.count += 1 start_response('200 OK', <('Content-type', 'text/plain')>) return <'Hello WSGI World %d' % self.count>if __name__ == "__main__": webapp = HelloApp() fcgi.WSGIServer(webapp, bindAddress=("localhost", 8888)).run()
Thực thi ứng dụng này cùng với lệnh python hello2.py, chạy sever Apache với các tùy chỉnh thiết lập đã có tác dụng trong bài viết kỳ trước, và truy vấn vào showroom http://localhost/fcgi-bin/hello.py thì bọn họ sẽ thấy bên cạnh đó sau:

Khi làm cho tươi trình phê chuẩn thì họ nhận được hình sau:

So sánh áp dụng viết theo WSGI và vận dụng viết theo các giao thức CGI, xuất xắc FCGI ta thấy rõ rằng áp dụng WSGI không cần lưu ý đến việc dữ liệu sẽ tiến hành truyền mang đến trình duyệt bằng cách nào. Ứng dụng WSGI chỉ để ý đến việc tạo nên dữ liệu gì và đẩy chỗ dữ liệu đó cho lớp WSGI bên dưới. Lớp này sẽ auto thực hiện câu hỏi truyền cho tới trình để mắt theo cách cực tốt có thể.
Xem thêm: Bí Quyết Kinh Doanh Của Ông Chủ Nhỏ Pdf, Kinh Nghiệm Thành Công Của Ông Chủ Nhỏ
Tuy nhiên, ứng dụng WSGI cũng phải ghi nhận rõ cách hoạt động của máy công ty WSGI. Ví dụ, một áp dụng WSGI chạy trên máy chủ WSGI theo mô hình CGI thì sẽ không còn thể trông chờ đến việc sử dụng lại biến toàn cục vì mỗi yêu cầu được một quy trình riêng xử lý. Đồng thời ứng dụng WSGI cũng phải đảm bảo rằng những chuỗi trả về phải là chuỗi byte (byte string) với không được áp dụng chuỗi unicode (unicode string). Tại sao là bởi vì giao thức HTTP thiếu hiểu biết nhiều unicode. Vì đó, tốt nhất có thể là vận dụng WSGI nên được gọi encode trên những chuỗi unicode để chuyển những chuỗi unicode thành những chuỗi byte trước lúc đưa xuống cho sever WSGI.
Một ưu thế của giao tiếp WSGI là 1 ứng dụng WSGI có thể gói (wrap) một vận dụng WSGI khác mặt trong. Điều này mang đến phép họ tạo ra những ứng dụng WSGI chuyển động như các phần giữa (middleware), hoặc bộ lọc (filter). Ví dụ:
def simple_app(environ, start_response): """Simplest possible application object""" status = '200 OK' response_headers = <('Content-type', 'text/plain')> start_response(status, response_headers) return <'Hello world!
'>def real_app(environ, start_response): r = simple_app(environ, start_response) return <'Tag!
'> + r
Với đoạn mã trên, áp dụng real_app sẽ gói áp dụng simple_app với chèn vào trong 1 chuỗi Tag!n phía trước gần như gì cơ mà simple_app giữ hộ về. Đây là một phương pháp để tạo nên các ứng dụng web lớn từ việc ghép những ứng dụng web bé dại lại cùng với nhau.
Chúng ta ngừng loạt bài xích Lập trình web với Python trên đây. Sau 7 bài viết ngắn gọn (nhưng diễn ra trong một khoảng thời gian dài), họ đã để mắt tới qua việc thiết lập Apache, cùng Python, rồi các giao thức căn cơ như HTTP, CGI. Từ đó, bọn họ bàn đến những giao thức hiện đại hơn, bao gồm một số điểm mạnh tốt như FCGI với lấy ví dụ đếm tần số truy cập. Cuối cùng họ dừng lại với một bàn bạc ngắn về tiếp xúc WSGI, là giao tiếp phổ thông nhất để viết ứng dụng web trong thế giới Python.
Tôi hy vọng sẽ gặp gỡ bạn hiểu trong các bài viết khác. Để bàn bạc về loạt bài bác này, bạn có thể sử dụng diễn đàn.