หลังจากที่ผมหาข้อมูลอยู่นาน ผมพบว่า Mod_python เป็น Mod ที่ใช้สำหรับเรียกใช้งาน Python กับ Mod_python แต่ปัจจุบันได้ยุติการสนับสนุนไปแล้ว แต่ยังพอมีวิธีตั้งค่า Python กับ Apache ครับ ก่อนจะเริ่มเขียน CGI ใน Python ให้ผู้อ่านตั้งค่า Apache ก่อนครับ
Windows
ตั้งค่า Pyhon กับ Apache บน Windows
- ติดตั้ง Python โดยโหลดจาก http://python.org/download/
- ตั้งค่า Apache เพื่อเรียกใช้งาน Python CGI
ให้เปิดไฟล์ httpd.conf ที่อยู่ในโฟลเดอร์ conf ในโฟลเดอร์ย่อยของ Apache ตัวอย่างเช่น “C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\”
เข้าไปแล้วให้ค้นหาOptions Indexes FollowSymLinks
ให้เพิ่ม ExecCGI จะได้Options Indexes FollowSymLinks ExecCGI
แต่สำหรับ Apache2.4 ขึ้นไปให้ใส่Options Indexes FollowSymLinks Includes ExecCGI
ถัดไปให้ค้นหา#AddHandler cgi-script .cgi
ให้ลบเครื่องหมาย # ออกแล้วเพิ่ม .py เข้าไปAddHandler cgi-script .cgi .py
เสร็จแล้วบันทึกไฟล์ แล้ว Restart Apache
เขียนโค้ดไฟล์ test.py#!C:\Python34\python.exe print("Content-Type: text/plain;charset=utf-8") print() print("Hello World!")
XAMPP กับ Python
สำหรับ XAMPP นักพัฒนาได้มีการเปิดใช้งาน CGI มาตั้งแต่ต้น สิ่งที่ต้องทำให้เปิดไฟล์ httpd.conf แล้วค้นหา
AddHandler cgi-script .cgi .pl .aspให้เพิ่ม .py เข้าไปจะได้
AddHandler cgi-script .cgi .pl .asp .pyให้บันทึกไฟล์เสร็จ Restart Apache แล้วลอง เขียนโค้ดไฟล์ test.py
ตรง C:\Python34\python.exe ให้เปลี่ยนเป็นรุ่นของ Python ที่ผู้อ่านใช้งาน แล้วบันทึกในโฟลเดอร์ htdocs เข้าไปที่ http://localhost/test.py จะได้ผลลัพธ์ Hello World!#!C:\Python34\python.exe print("Content-Type: text/plain;charset=utf-8") print() print("Hello World!")
Linux
สำหับ Linux สาย Debian เช่น Ubuntu
ให้ติดตั้ง Apache กับ Python แล้ว ให้ใช้คำสั่งเปืดการเรียกใช้ CGI โดยใช้คำสั่งsudo a2enmod cgiจะนั้นให้เปิดไฟล์ conf ให้หา
<Directory /srv/www/yoursite/public_html/cgi-bin>
Options ExecCGI
SetHandler cgi-script
</Directory>
แล้วเพิ่ม .py เข้าไปจะได้
<Directory /srv/www/yoursite/public_html>
Options +ExecCGI
AddHandler cgi-script .py
</Directory>
เสร็จแล้วบันทึกไฟล์ ลองเขียนโค้ด
ตรง #!/usr/bin/env python ผู้อ่านสามารถเปลี่ยนค่าได้ ตัวอย่างเช่น หากผู้อ่านใช้ Python 3 ให้เปลี่ยนเป็น #!/usr/bin/python3#!/usr/bin/env python # -*- coding: UTF-8 -*- print("Content-Type: text/plain;charset=utf-8") print() print("Hello World!")
แล้วบันทึกไฟล์ชื่อว่า test.py กำหนด chmod 755 แล้วลองเข้าไปที่ http://localhost/test.py จะได้ผลลัพธ์ Hello World!
เขียน CGI ด้วย Python
ตัวอย่างแรกของ CGI ใน Pythonprint("Content-Type: text/plain;charset=utf-8") print() print("Hello World!")
อธิบายโค้ด
บรรทัดที่ 1 ใช้ print ในการกำหนดชนิดของเนื้อหาเป็น HTML และกำหนดเป็น utf-8
บรรทัดที่ 4 ใช้ print แสดงผลลัพธ์เป็น Hello World!
ผู้อ่านสามารถใช้ Python ประยุกต์กับงานกับ HTML ด้วย CGI ได้ง่าย ๆ
ตัวอย่างที่ 2
import time print("Content-Type: text/html\n\n") #กำหนดรูปแบบเป็น html timeStr = time.strftime("%c") #กำนหดค่า Time มีรูปแบบเป็น 11/02/14 08:59:54 htmlFormat = """ <html> <Title>The Time Now</Title> <body> <p>The current Central date and time is: {timeStr}</p> </body> </html> """ print(htmlFormat.format(**locals())) #ดึง timeStr มาใช้โดยแทน {timeStr} ที่มีค่าเป็น %s
จะได้ผลลัพธ์
The current Central date and time is: 11/02/14 08:59:54
ต่อไปหากต้องการให้มีความสามารถเพิ่มเติมเช่น การรับค่าจากฟอร์ม HTML เป็นต้น ต้องเรียกใช้โมดูล cgi
GET และ POST Methods
ในการเขียน CGI การทำงานบางอย่าง ต้องมีการรับข้อมูลจาก Form มาประมวลผล ต้องใช้- ฟังก์ชั่น cgi.FieldStorage() มีการกำหนดที่เก็บข้อมูล Field
- ฟังก์ชั่น getvalue เพื่อรับค่าที่ได้จาก GET และ POST
ตัวอย่างที่ 3
ไฟล์ 3.py
#!C:\Python34\python.exe import cgi # กำนหนดค่าแทน FieldStorage form = cgi.FieldStorage() #รับข้อมูลจาก Field โดยเก็บค่าที่ได้ไว้ในตัวแปร name name = form.getvalue('name') print("Content-type:text/html\r\n\r\n") print("<html>") print("<head>") print("<title>สวัสดี</title>") print("</head>") print("<body>") print("<h2>สวัสดี %s</h2>" % (name)) print("</body>") print("</html>")
ไฟล์ form.html
โค้ด:
<html>
<Title>Form</Title>
<body>
<form action="3.py" method="get">
Name: <input type="text" name="name"> <br />
<input type="submit" value="Submit" />
</form>
เมื่อลองรันจะพบว่า
เมื่อกรอกค่าใน Form แล้วข้อมูลจากไปปรากฏที่ไฟล์ .py โดยส่งค่าเป็น GET
ถ้าเป็น POST จะใช้หลักการเดียวกันครับ แต่ตรง method="get" ใน Form ต้องเปลี่ยนเป็น method="post" ครับ
Cookie
ในการใช้งาน Cookie ใน Python CGI ต้องใช้ Set-Cookie ใน print ก่อนที่จะ Content-type ดังตัวอย่างต่อไปนี้ตัวอย่างที่ 4
import time print('Set-Cookie: lastvisit=' + str(time.time())) print("Content-type:text/html\r\n\r\n")
จะได้ Cookie ที่มีชื่อว่า lastvisit โดยมีค่าเป็น time.time()) ตัวอย่างเช่น 1414903082.041233
อัปโหลดไฟล์
ในการอัปโหลดไฟล์ด้วย CGI กับ Python นั้นต้องมีการเขียนไฟล์ลงในโฟลเดอร์ ดังตัวอย่างต่อไปนี้ตัวอย่างที่ 5
form.html
<html>
<body>
<form enctype="multipart/form-data" action="5.py" method="post">
<p>File: <input type="file" name="myfile" /></p>
<p><input type="submit" value="Upload" /></p>
</form>
</body>
</html>
5.py
#!C:\Python34\python.exe import cgi form_data = cgi.FieldStorage() file_data = form_data['myfile'] fp =open('/file','wb') fp.write(file_data) fp.close()ร่วมพูดคุยเกี่ยวกับการพัฒนาเว็บด้วย Python กันได้ที่ Python Web Developer
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)