1. 程式人生 > >Windows下使用Apache執行本地Python指令碼和訪問html教程

Windows下使用Apache執行本地Python指令碼和訪問html教程

最近學習到Python的cgi程式設計,搗鼓了一番,把自己的學習經驗放出來。

一、安裝Apache2.4伺服器

你需要去官網下載。

地址:https://www.apachehaus.com/cgi-bin/download.plx或者http://www.apachelounge.com/download/。這兩個地址一般情況下都是可以的。如果第一個地址下載提示 403 Forbidden,那就換第二個地址一般沒什麼問題的。

下載ok後解壓,我的安裝解壓目錄是D:\Program Files\ApacheHttpdServer (目錄隨意請不要使用中文),使用cmd切換到Apache的bin目錄下,使用httpd -k install安裝服務。如果成功便會提示installed,如圖:


當然一般剛下載的檔案是無法安裝成功的。因為我們需要修改httpd.conf檔案。

二、修改httpd.conf檔案

進入D:\Program Files\ApacheHttpdServer\Apache24\conf資料夾下,找到httpd.conf使用好一點的文字編輯器開啟。凡是#開頭的都是註釋,所以請要麼刪除,要麼無視。

我們需要修改幾個關鍵的元素。

1.ServerRoot,這個必須是正確的目錄,它是Apache2.4的主目錄。Listen 指示伺服器的埠號,預設80,如果你的程式會佔用那就修改掉好了。我的修改方案如下:

ServerRoot "D:/Program Files/ApacheHttpdServer/Apache24"

Listen 80

2.DocumentRoot,這個必須是正確的資料夾目錄,末尾不能帶/。這個目錄用來存放靜態資源頁面,我們要訪問的html檔案就放在這下面。我的修改方案如下:

DocumentRoot "D:/Program Files/ApacheHttpdServer/Apache24/htdocs"

3.<IfModule alias_module>標籤元素,其內部ScriptAlias指令規定Apache2.4訪問二進位制指令碼檔案的目錄,這個很重要,一定要修改,我的修改方案如下:

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "D:/Program Files/ApacheHttpdServer/Apache24/cgi-bin/"
</IfModule>

4.Directory標籤元素,約定指令碼檔案的訪問目錄和許可權,這個也很重要,一定要修改。我的修改方案如下:

<Directory "D:/Program Files/ApacheHttpdServer/Apache24/cgi-bin/">
    AllowOverride None
    Options +ExecCGI
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

注意,是Require all granted而非Require all denied,錯誤使用後者將可能導致訪問被拒絕。且Directory的目錄和ScriptAlias的目錄一致。

5.<IfModule mime_module>標籤元素,內部關鍵指令AddHandler用來預訂Apache2.4可以訪問哪些格式的指令碼檔案。因此我們要加上.py

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddHandler cgi-script .cgi .py
</IfModule>

其他沒有提到的都可以無視掉。溫馨提示,所有修改動作都是在conf檔案已有的元素上進行的覆蓋操作,你需要找到需要修改的元素然後覆蓋。請不要直接將我的方案copy後追加到conf檔案後面。

好了,如果第一步服務未安裝成功,請再次嘗試使用httpd -k install安裝服務。然後開啟ApacheMonitor.exe點選start就ok了,如果start仍然失敗請依次檢查我提到的5點看是否修改正確。

如果ok你將看到下圖,它是綠色的。


此時瀏覽器直接輸入localhost,將看到It works。代表服務啟動ok


三、編寫python檔案和html檔案

我的程式碼hello.py如下:

#!D:\Programs\Python\Python36\python.exe
#-*- coding:UTF-8 -*-
print ("Content-type:text/html")
print ()
print ('<html>')
print ('<head>')
print ('<meta charset="gb2312">')
print ('<title>Hello Word - 我的第一個 CGI 程式!</title>')
print ('</head>')
print ('<body>')
print ('<h2>Hello Word! 我是來自菜鳥教程的第一CGI程式</h2>')
print ('</body>')
print ('</html>')

注意前兩段的兩個#號可不是註釋哦,第一段#指令用來指定使用哪個python直譯器來執行指令碼(如果你還沒有安裝python那肯定跑不了的哦)。第二段指定指令碼的輸出編碼。

我的test.html檔案程式碼如下:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Hello Word - 我的第一個 CGI 程式!</title>
</head>
<body>
<h2>Hello Word! 我是來自菜鳥教程的第一CGI程式</h2>
</body>
</html>

然後將hello.py丟進cgi-bin目錄,將test.html丟進htdocs目錄。如下



然後分別輸入http://localhost/cgi-bin/hello.py 和 http://localhost/test.html將訪問成功



完結,謝謝觀看。