12.11.09

ทำ Python ให้เป็น CGI (Apache+Python)

จากคราวที่แล้วที่ผมเริ่มอยากจะเอาจริงกับภาษาไพธอนแล้ว ผมก็เริ่มที่จะมองหาโปรเจคทำ ซึ่งผมคิดว่าการเรียนรู้ภาษาใดๆ โดยเริ่มจากการเรียนรู้จากการทำโปรเจคทำให้เราสามารถเรียนรู้ภาษานั้นได้เร็วกว่าการที่เรามานั่งอ่านหนังสือแล้วทำตามตัวอย่าง ซึ่งอาจทำให้เกิดการเบื่อหน่ายได้ง่ายๆ สุดท้ายก็อาจจะจบด้วยการล้มเลิกลงกลางคัน

โดยส่วนตัวแล้ว ผมค่อนข้างที่จะถนัดการเขียนโปรแกรมแนว web base ซะมากกว่า windows base วันนี้ผมก็เลยตั้งใจว่าจะทำการ config apache web server ให้สามารถเข้าใจตัวแปลภาษา python สักหน่อย เพื่อที่เราจะได้ลองเขียนภาษา python ให้สามารถทำงานบนเว็บ page ได้ ตอนแรกนั้นผมพยายามที่จะติดตั้งโมดูลตัวหนึ่งที่ชื่อ mod_python แต่ก็ไม่สามารถทำได้สักที

 

 

Mod_python คือ โมดูลที่เอาไว้สำหรับรวมต้วแปลภาษาไพธอนเข้ากับเว็บเซอร์วิส (ในที่นี้คือ Apache) ซึ่งจะทำให้เราสามารถเขียนเว็บ CGI ด้วยภาษาไพธอนได้นั่นเอง

 

หลังจากที่ได้พยายามนานมากหมดไปครึ่งวัน ทั้ง search หาในอินเตอร์เนต ก็พบว่าฝรั่งเค้าก็มีปัญหาเหมือนๆกันกับเรา ปัญหาที่เจอก็คือหลังจากติดตั้งโมดู mod_python นั้น เราไม่พบไฟล์ mod_python.so ซึ่งจริงๆไฟล์นี้น่าจะไปอยู่ใน folder C:\AppServ\Apache2.2\modules ซึ่งในตอนติดตั้งมันก็ถามเราอยู่นะ ว่า folder ที่เราติดตั้ง Apache อยู่ตรงไหน แต่ไหงพอเลือกแล้ว พี่แก error ขึ้นมาเฉยๆ เซ็งเลย

 mod_python

mod_python_error 

สุดท้ายก็มาจบที่วิธีที่ง่ายมากๆ (เวงกรรม แล้ว mod_python ใครคนคิดขึ้นมาเนี่ย!!!) แค่ติดตั้ง python เสร็จ แล้วเข้าไป config ที่ไฟล์ httpd.conf แค่เนี้ย

AddHandler cgi-script .cgi .py .pl

ScriptAlias /cgi-bin/ "c:/apache/cgi-bin/"

แล้วก็เขียน code ด้วย python ขึ้นมาแล้วไปวางไว้ที่ C:\AppServ\www\cgi-bin (เค้าบอกว่าด้วยเหตุผล security)

 

#!C:\Python24\python.exe -u

import cgi
import cgitb; cgitb.enable()  # for troubleshooting

print "Content-type: text/html"
print

print """
<html>

<head><title>Sample CGI Script</title></head>

<body>

  <h3> Sample CGI Script </h3>
"""

form = cgi.FieldStorage()
message = form.getvalue("message", "(no message)")

print """

  <p>Previous message: %s</p>

  <p>form

  <form method="post" action="index.cgi">
    <p>message: <input type="text" name="message"/></p>
  </form>

</body>

</html>
""" % message

 

แล้วก็ทดลอง run ดู

python web programming test

เอาหล่ะ ก็พอได้แนวคิดแล้ว ต่อไปก็ลองๆประยุกต์เอาโค๊ดที่เราเคยเขียนด้วยภาษาอื่น มาแปลงเป็น python ดู น่าจะช่วยให้เกิดความเข้าใจยิ่งขึ้นไปอีก สู้ๆๆ เดี๋ยวก็เขียนเป็นแหละ อย่าไปกลัวๆ

เพิ่มเติมอีกนิดครับ

หากเพื่อนๆต้องการที่จะ config apache เพื่อให้เราสามารถที่จะบันทึกไฟล์ python cgi script อยู่นอก cgi-bin ให้ทำการปรับแต่งไฟล์ httpd.conf ดังนี้

  • ให้ทำการมองหา #AddHandler cgi-script .cgi แล้วเอา comment ออก คือเครื่อง “#” ออกนั่นเอง
  • แล้วทำการปรับแต่ง SSL เพื่อให้สามารถวาง directory โค๊ดของเราที่ก็ได้ใน www directory โดยมองหาบรรทัดนี้ #AddType text/html .shtml และบรรทัดนี้ #AddOutputFilter INCLUDES .shtml โดยให้เราเอาเครื่องหมาย comment ออก “#”
  • ทำการบันทึกไฟล์ httpd.conf แล้ว restart apache
  • ทดลอง เขียนไฟล์ cgi แล้ว save แล้วลองทดสอบที่ browser ดูครับ

#!C:\Python24\python.exe
print "Content-Type: text/html\n\n"
print "Hello, world!"

python cgi script

ถ้าปรากฏแต่คำว่า Hello, World! แสดงว่าสำเร็จแล้วครับ

 

“….The first step is always the hardest
การเริ่มต้นทำสิ่งใดสิ่งที่ยากที่สุดก็คือตอนเริ่มต้นทำ…….”

1 ความคิดเห็น:

ball6847 on 6:12 pm, December 14, 2009 said...

Python นีั่เราต้องเขียน Response Header เองด้วยหรอคับ

Post a Comment

 

เกี่ยวกับฉัน(ไหมเนี้ย)

My photo

สวัสดีครับ ชื่อเปิ้ลนะครับ ถ้ามีอะไรให้ช่วยเหลือได้ ก็จะช่วยครับ
ผมได้สร้างบล๊อกไว้ เพื่อเก็บรวบรวมความรู้ และประสบการณ์ในการทำงานครับ แวะไปเยี่ยมชมกันได้ครับ http://mechacity.blogspot.com และบล๊อก http://faker-programmer.blogspot.com ครับ

รายการบล๊อกอื่นๆ

  • Solved: error: 'TKD2' was not declared in this scope, LIFA_Base compile error - วันนี้ จะมาเล่าถึงปัญหาที่เจอในการเบิร์นโค๊ด LIFA_Base ที่เราใช้ในการทำให้ Arduino ของเราสามารถรับคำสั่งจาก LabVIEW ได้ ปัญหานี้ เริ่มเกิดขึ้นตอนที่ Ard...
  • Type-Fu : Typing practice game online - หากใครที่สนใจ หรือจะต้องทำงานเกี่ยวกับคอมพิวเตอร์ หนึ่งในความจำเป็นก็คือ จะต้องเรียนรู้ที่พิมพ์สัมผัสได้ เพราะการที่พิมพ์สัมผ้สได้ มันได้ประโยชน์หลายๆ อย...

Blog อื่นๆ ที่น่าติดตาม

เหล่าบรรดา Blogger