「CGI(Common Gateway Interface,通用網關接口) 是Web 服務器運行時外部程序的規範,按CGI 編寫的程序能夠擴展服務器功能。」(百度百科)Python語言自帶CGI處理模塊,能夠經過編寫python CGI腳本實現網頁前端與Python程序的交互。從網頁前端獲取的數據每每又能夠經過connector-python實現與MySQL等數據庫的交互,從而從整個項目的角度來講,該環境的搭建和運行是實現Python CGI全棧的整個過程的第一個較爲重要的步驟。本文旨在論述Python CGI開發運行環境的兩個配置方法。html
編寫好的python CGI腳本須要在主機(服務器)的特定配置下才能正常運行。本例選擇xampp server爲例。xampp server是Apache server的一種,可用於搭建本地小微型服務器,下載地址爲:https://www.apachefriends.org/index.html 。xampp相關的周邊產品詳見連接:https://bitnami.com/stack/xampp?utm_source=bitnami&utm_medium=installer&utm_campaign=XAMPP%2BInstaller前端
安裝完畢後,單擊Apache control panel中Apache 模塊後的config按鈕,選擇httpd.conf。在打開的文本文檔中按Ctrl + F搜索關鍵詞「addhandler」,並在如圖所示處加入python腳本的文件擴展名.py。python
xampp安裝完畢以後,打開路徑中的htdocs文件夾,在其中新建文件夾My_projects,而且編寫一個僅含有一個文本框和一個按鈕,且所用語言爲英語的簡易網站(charset爲utf-8時,若不更改原始設置會致使xampp server報error 500錯誤,此處入門簡介爲了簡便,便暫時不處理此問題)。該建議html腳本以下:web
<html> <title>Wish collecting website</title> <body> <form method=POST action="../cgi-bin/My_projects/chap01_01_Hellocgi.py"> <p>Input your wish: </br> <p><input type=text name=thing> <p><input type=submit value='Submit your wish!'> </form> </body> </html>
該腳本路徑爲」xampp軟件安裝路徑」本機XAMPP安裝目錄\htdocs\My_projects\Submit_wish.html」,運行效果如圖:數據庫
該腳本也比較簡單,爲讀入提交上述html的表單中的數據而且以必定形式輸出在瀏覽器中,腳本以下:apache
#!C:/Develop_Tools/Anaconda3/python import cgi form = cgi.FieldStorage() print("Cotent-type: text/html\n") print("Hope that your wish: \"", form['thing'].value, "\" comes true!")
其中,第1行爲聲明當前系統中Python解釋器的路徑,視系統不一樣須要做出相應修改。第四行html後的換行符(」\n」)不能省略且必須放置於正式內容以前。根據通常的cgi項目規範,被執行的CGI腳本應當被放置於cgi-bin文件夾中(雖然放在同一級目錄中亦可,可是出於安全性等緣由通常不會這麼作)。腳本路徑位爲:」本機XAMPP安裝目錄\cgi-bin\My_projects\chap01_01_Hellocgi.py」。編程
至第三步爲止,該交互程序就編寫完畢了,最後打開Submit_wish.html這個網頁文檔,並運行本地的Apache server進行調試,如圖所示:瀏覽器
注意:網頁文件的路徑」本機XAMPP安裝目錄\htdocs\My_projects\Submit_wish.html」在調試時應當變動爲:」 https://WEB_SERVER_URL/My_projects/Submit_wish.html」 。其中WEB_SERVER_URL爲網頁所在的IP地址,本機調試下值爲localhost或127.0.0.1。 其中https視狀況也可能爲http。安全
CGI編程的調試過程還能夠經過自建python腳本做爲CGI服務器實現,該腳本以下:服務器
# -*- coding: utf-8 -*- import os from http.server import HTTPServer, CGIHTTPRequestHandler webdir = "./" port = 80 os.chdir(webdir) srvraddr = ("localhost", port) srvrobj = HTTPServer(srvraddr, CGIHTTPRequestHandler) srvrobj.serve_forever()
而後,在該腳本所在路徑新建一個文件夾,命名爲cgi-bin,而且將方法一第三步的腳本放入這其中。
以後,把上述方法一第二步 html 腳本的第四行路徑視狀況做出相應的修改,若是在方法一中放入的就是cgi文件相關目錄下,則不用修改: <form method=POST action="../cgi-bin/My_projects/chap01_01_Hellocgi.py">
,若是在自建的cgi-bin文件夾下沒有My_projects這個文件夾,而是直接將cgi腳本放入其中,則能夠改爲:<form method=POST action="../cgi-bin/chap01_01_HellocgiV2.py">
。運行效果以下(假設調試運行環境即爲本機):
建議:爲了調試簡便性以及路徑管理方便性,建議將自建的服務器腳本、網頁入口頁面和cgi-bin文件夾放在同一個目錄下,python cgi腳本直接放入cgi-bin文件夾中。
本文簡要講述了Python CGI編程的搭建、調試和運行過程。這一過程是使用Python將前端數據經過CGI轉化爲Python程序可以進行處理的重要一步,於是理解這一過程有利於爲進一步使用Python進行全棧開發打下了技術基礎。順祝各位有志全棧的同窗們在全棧的道路上行進順利。