Hình thức cgi python

Một chương trình CGI hữu dụng thông thường sẽ nhận dữ liệu đầu vào thông qua các mẫu đơn [biểu mẫu], xử lý các dữ liệu này và trả về kết quả

  • 0
  • 4805

Hướng dẫn Lập trình Web với Python[2]


Một chương trình CGI hữu dụng thông thường sẽ nhận dữ liệu đầu vào thông qua các mẫu đơn [biểu mẫu], xử lý các dữ liệu này và trả về kết quả


Dữ liệu đầu vào được truyền đến ứng dụng web ở dạng bộ 2 [khóa, giá trị] [cặp khóa-giá trị]. Ví dụ nếu chúng ta điền vào một mẫu đơn có trường nhập tên là tên và giá trị của nó là Nguyễn Việt Nam thì từ khóa sẽ là tên và giá trị là Nguyễn Việt Nam. Thông thường có hai phương thức truyền dữ liệu đến ứng dụng web là GET và POST


Trong phương thức GET, bộ 2 [khóa, giá trị] này sẽ được truyền qua URL. Với ví dụ ở trên, URL sẽ có dạng http. //host/path?name=Nguyễn+Việt+Nam. Bạn đọc sẽ chú ý đến các điểm quan trọng sau

  1. Đi ngay phía sau đường dẫn đến ứng dụng CGI là một dấu chấm hỏi [?]. This tự ký tự được sử dụng để thông báo phía sau phần dữ liệu được nhập
  2. Phân cách giữa khóa và giá trị của dữ liệu nhập là dấu bằng [=]
  3. Key and value has been convert code theo format phù hợp. Chúng ta thấy rằng các ký tự khoảng trắng được chuyển thành ký tự cộng [+]. Việc chuyển mã này nhằm mục đích làm cho URL không chứa các ký tự đặc biệt có thể gây nhầm lẫn
  4. Unknown said in ví dụ là các ký tự phân cách của bộ 2 [khóa, giá trị] là ký tự và [&]

Trong phương thức POST, bộ 2 [khóa, giá trị] được truyền trong nội dung yêu cầu HTTP và không xác định người dùng


Hãy thử trải nghiệm với chương trình ví dụ sau [đặt tên nó là fp. py]

print ["Kiểu nội dung. văn bản/html"]

in [""]

print ["CGI form processing"

+"Number guessing game"

+""

+"Enter a number"

+""

+""

+""

+""]


Kết quả mà chúng tôi nhận được là một mẫu đơn như hình




Một số điểm quan trọng trong chương trình này là việc sử dụng các thẻ liên quan đến mẫu đơn

  1. Trước hết là biểu mẫu thẻ được sử dụng để thông báo sự bắt đầu của một mẫu đơn. Các thuộc tính [thuộc tính] thông thường của thẻ này bao gồm phương thức và hành động
  2. Thuộc tính phương thức xác định phương thức truyền dữ liệu. Chúng ta có thể sử dụng GET hoặc POST
  3. Thuộc tính hành động xác định đường dẫn đến chương trình CGI sẽ xử lý đơn mẫu này. Nếu không xác định thì địa chỉ chính hiện tại sẽ được sử dụng
  4. Đầu vào thẻ xác định một trường nhập. Thẻ này có các thuộc tính chính là loại, tên và giá trị
  5. Loại thuộc tính xác định kiểu nhập là một ô nhập [hộp văn bản], một nút nhấn [nút], một nút chọn [nút radio] hoặc một tệp [tệp]. At ví dụ này chúng ta xác định một ô nhập với kiểu văn bản
  6. Thuộc tính tên xác định khóa của bộ 2. Trong ví dụ này, từ khóa nhập là số
  7. Thuộc tính giá trị xác định giá trị khởi động của trường nhập này. Chúng ta để trống
  8. Đầu vào thẻ với loại thuộc tính là gửi sẽ tạo một nút nhấn. Nút nhấn này đặc biệt vì nó sẽ gửi các giá trị mà chúng ta nhập vào mẫu đơn đến chương trình CGI
Thông tin chi tiết về các thẻ HTML có thể được xem thêm từ các tài liệu từ W3C


Chương trình này cũng chỉ nằm trong một mẫu đơn nhưng chúng ta có thể nhấn nút để gửi mẫu đơn đó đi


Chúng ta sẽ sửa nó để ghi lại những gì đã nhận được từ trình duyệt


#. /python35/python

nhập cgi,cgitb;cgitb. cho phép[]

cgitb. cho phép[]

print ["Kiểu nội dung. văn bản/html"]

in [""]

print ["CGI form processing"

+"Number guessing game"

+""

+"Enter a number"

+""

+""

+""

+""

+""]

hình thức = cgi. Lưu trữ trường []

print["Bạn đã nhập. %s" % biểu mẫu. getfirst['số']]


Điều đầu tiên chúng ta nhận ra là sự sử dụng mô-đun cgi. Mô-đun này cho phép chúng ta tạo một đối tượng FieldStorage. Đối tượng FieldStorage chứa bộ 2 [khóa, giá trị] chúng ta nhận được từ trình duyệt trong một cấu trúc như kiểu từ điển. Do đó, chúng ta có thể sử dụng phương thức has_key để kiểm tra sự tồn tại của khóa tương ứng. To get value from FieldStorage ta could use form[’number’]. giá trị hoặc gọi các hàm như getvalue, getfirst, hay getlist. Các hàm này được đề cập đến một cách chi tiết trong bộ tài liệu sử dụng Python


Nếu tinh ý, chúng ta sẽ thấy rằng khi dữ liệu nhập chứa các thẻ HTML hợp lệ thì kết quả xuất ra sẽ hiển thị cả những thẻ HTML này. Ví dụ khi ta nhập Nguyễn Việt Nam.




Điều này có thể đúng theo ý định, hoặc cũng có thể nằm ngoài mong muốn. Chúng ta gọi đây là các lỗi viết chéo trang [Cross Site Scripting, XSS]. Cách giải quyết là trước khi hiển thị các chuỗi không nằm trong kiểm tra giám sát của chương trình [ví dụ như dữ liệu nhập, dữ liệu xuất từ ​​hệ thống khác, v. v…], chúng ta sẽ cần chuyển mã các ký tự đặc biệt. Mô-đun cgi cung cấp hàm escape để thực hiện công việc này. Mã nguồn mới sẽ gói getfirst trong cgi. thoát như sau

#. c. /python26/python


nhập cgi


in "Kiểu nội dung. văn bản/html"

in


print """

Xử lý biểu mẫu CGI

Trò chơi đoán số

Nhập số

"""


hình thức = cgi. Lưu trữ trường []

nếu hình thức. has_key['số']

in """Bạn đã nhập. %s""" %cgi. thoát khỏi[ \

hình thức. getfirst['số'], Đúng]


in """

"""

Giờ đây, chuỗi được xuất ra sẽ giống với chuỗi đầu vào




Chúng ta cũng có thể thử với phương thức GET bằng cách nhập thẳng URL //localhost/cgi-bin/fp.py?number=Nguyễn+Việt+Nam. Chúng ta cũng sẽ nhận được kết quả tương tự.


Vì vậy, thông qua hai phần mà chúng tôi đã tìm hiểu về cách hoạt động của một chương trình CGI. Điểm mạnh của giao thức CGI là tính đơn giản và độ an toàn cao vì mỗi yêu cầu là một tiến trình xử lý riêng. Cũng chính vì mô hình đơn giản như vậy nên CGI gặp phải nhiều cản trở trong quá trình phát triển. Đầu tiên, chương trình CGI phải trở thành đầu tiên phải xử lý trạng thái xử lý tự động giữa các yêu cầu kế tiếp nhau, hay còn gọi là phiên làm việc [phiên]. Cản trở thứ hai là chương trình CGI phải được thiết kế đặc biệt nếu muốn sử dụng các biến có phạm vi toàn ứng dụng [phạm vi ứng dụng]. Cuối cùng, chương trình CGI chạy chậm hơn và tài nguyên tốt hơn vì mỗi yêu cầu phải được xử lý riêng

Chủ Đề