配置Apache伺服器實現瀏覽器訪問python程序
近幾年來,隨著大數據和人工智慧概念的日益火爆,python的關注度迅速升溫,成為眾多AI從業者的首選語言。然而,在所有的編程語言中,python並不算萌新,從1991年發布第一個版本以來,至今已經快30年了。微信公眾號【@大數據每日評論】的一篇文章是這樣描述python火爆原因的:
原因一:python是一種說人話的語言;
1.開發者不需要關注底層,降低了開發門檻,正所謂小學生都在用python,玩笑話!
2.語法極其簡單直觀;
3.表達形式一致。
對於原因一,這篇文章利用程序員們最熟悉的程序做了幾種常見語言的對比。
c語言Hello World代碼:
Java語言Hello World代碼:
Python語言Hello World代碼:
原文描述道: "僅僅是一個Hello World程序,就能看出區別了,是不是?"(雖然我不以為然)。
原因二:強大的AI支持庫;
1.矩陣運算(這點與matlab有相似之處);
2.ML(機器學習)模型(比如一個簡單的邏輯回歸就幾行代碼可以搞定);
3.完美的圖表解決方案(python生成dashboard上的各種圖形表格,是非常簡單的事情)。
原因三:規模效應(聽起來很抽象!)。
"根據以高收入國家Stack Overflow問題閱讀量為基礎的主要編程語言趨勢分析統計,可以看出,近年來,Pyhotn已經力壓Java和Javascript,成為目前發達國家增長最快的編程語言。"(這裡為Javascript打一下廣告,Javascript在眾多編程語言中雖不是一馬當先,當也可謂是後起之秀;特別是隨著移動互聯網的普及,Javascript的地位和使用量都在不斷上升,從目前來看,javascript語言的生態稱得上是百花齊放,node.js、vue.js、jquery.js...等等編程框架層出不窮。另外,當今中國使用最頻繁的社交軟體—微信出品的小程序,其中大量代碼使用javascript。)
以上描述了python語言火爆的幾點原因,接下來說說python的web編程。
大家都知道,python由於以上描述的幾點原因,被廣大的AI從業者視為自身的拿手好戲,其實,python是一門典型的解釋型語言,其不至於訓練神經網路等用途,web應用也是python的另一"殺手鐧"(有點誇張)。接下來就帶你進入python的web編程。
首先,假設你對http、https、tcp等協議的運行機理有所了解,今天所講內容基於如下的開發環境,並假設你已搭建此環境。
運行環境:Win10+Python3.6+Apache2.2+CGI+Chrome瀏覽器,環境很簡單,不需要花費一分錢,這是重點。
步驟一:配置apache伺服器運行CGI模式,具體過程表述如下:
1.在apache安裝目錄下找到其配置文件httpd.conf:
2.利用記事本或sublime(強烈推薦)打開該文件並找到以下內容:
修改ScriptAlias /cgi-bin/ "E:comcgibin"中的"E:comcgibin"為你自己的cgi directory。
接下來找到:
將
最後,找到:(如果沒有就直接添加此句)
如果找到,則添加.py類型的文件即可,如果沒有此句,直接添加即可。
至此,apache伺服器配置完畢,接下來讓我們進入python的web編程之旅吧!
首先,使用sublime創建一個文本文件,並命名為index.py,將其保存到apache的伺服器根目錄即可,具體內容如下:
index.py文件共有4行程序,其中第一行含義是指定本地伺服器的python解釋器地址,(必須)、第二行表示此類文件的類型是text或plain(必須)、第三行輸出換行符(必須)、第四行則是經典的Hello World程序,此行以後就是你自己發揮的天地了。
打開Chrome瀏覽器,在地址欄中輸入localhost/cgibin/index.py,運行結果如下:
怎麼樣?是不是超級簡單,接下來來點不一樣的,動態web編程,連接mysql資料庫,生成json數據格式顯示。具體代碼如下:
#!C:UsersBX-yyAppDataLocalProgramsPythonPython36python.exe
print ("Content-type: text/plain")
print ("")
print ("Hello Word!")
import MySQLdb
import sys
import time
import json
#import urllib2
# 打開資料庫連接
cursor = db.cursor()
print ("開始資料庫操作")
sql = "SELECT * FROM ci_goods;"
try:
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
print (fname,lname,age,sex,income,"
")
#print(json.dumps(results))
except:
print ("資料庫查詢失敗")
text="資料庫讀取操作結束"
print (text)
db.close()
打開瀏覽器查看運行結果如下:
由於以上格式的輸出是python的print函數直接輸出的對象信息,不便於網路里的數據傳輸,下面將查詢結果json序列化,具體代碼改動如下:
即取消print(json.dumps(results))前面的注釋,打開瀏覽器查看運行結果如下:
是不是看起來太亂,可讀性極差,哈哈!這就是通過json序列化後的結果,別小看它哦!在進行數據傳輸和交換解釋的時候可是很有用的哦。
最後,想把此文件做成python的API程序,通過ajax的方法進行訪問,於是乎,修改代碼如下:
#!C:UsersBX-yyAppDataLocalProgramsPythonPython36python.exe
print ("Content-type: text/plain")
print ("")
print ("Hello Word!")
import MySQLdb
import sys
import time
import json
def queryDb():
cursor = db.cursor()
print ("開始資料庫操作")
sql = "SELECT * FROM ci_goods;"
try:
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
#print (fname,lname,age,sex,income,"
")
print(json.dumps(results))
except:
print ("資料庫查詢失敗")
text="資料庫讀取操作結束"
print (text)
db.close()
urlPara=True
if urlPara==True:
queryDb()
else:
retInfo={"error":False,"data":"沒有此類查詢"}
print(json.dumps(retInfo))
前端通過javascript的jquery框架的ajax方法請求數據服務,具體代碼如下:
打開瀏覽器,訪問index.html驗證結果如下:
從結果可以看到,中文顯示亂碼,這不是大問題,只要在python文件開頭指定文件編碼格式為utf-8即可解決。
至此,配置apache伺服器實現瀏覽器訪問python程序到此結束。
接下來,小編將致力於後台採用基於tensorflow的深度學習框架訓練模型,前端使用javascript將模型和處理結果可視化,是不是很有趣,如果你對這方面也感興趣,歡迎後台留言聯繫我!
TAG:AI小精靈 |