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ả
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 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 (" +" ")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
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 (" +" "+"") 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 """ <đầu> """ 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 """ |