作者:JueDream
來源:http://blog.csdn.net/qq_35731570/article/details/62221021?locationNum=2&fps;=1
這篇文章主要講述的是在Windows下,在eclipse中如何透過使用webpy框架進行python的web開發。很多文章都是在自己一次次的碰壁中又決定自己寫一篇。像原來的MySQL的安裝,每次安裝都是需要重新再搜尋一遍遇到的問題如何解決。
本文分幾個部分:
第一個部分是python的安裝,如果安裝過了的童鞋,則可以直接跳過去這一步;
第二部分是eclipse中PyDev外掛的安裝,安裝之後在eclipse中就可以進行python的開發;
第三個部分是webpy的安裝;
第四部分是MySQLdb的安裝;
第五部分是sqlalchemy的安裝;
最後則是程式碼示例。
python安裝
在Windows下無論安裝什麼都是比較麻煩的,同樣包括Python。在Windows下安裝python可以去python官網下載,在這裡有一個下載版本的問題。現在可以分為兩個大版本,即3.X之前和3.X之後。如果單純是做python的開發(不會依賴其他第三方庫),當然是選擇3.x之後的版本。因為python的升級是不可阻擋的趨勢,還不如早早選擇新版本,省的以後再版本更換的時候出現額外的精力;但是如果是要和其他框架又耦合,那麼建議是選擇3.x之前的版本。在整個框架搭建過程中不致一次的出現因為版本不相容導致莫名奇妙的問題出現,花費很長的時間去定位。比如開始python開始是3.4最新版本,但是webpy依賴的是python2.7的版本,無法正常安裝(因為3.4和2.7之間有些語法不同)。
下載完之後就可以直接單擊安裝,選擇安裝目錄就好。在這裡需要註意的是安裝完建議修改一下系統變數,這樣以後可以在cmd裡直接執行python命令就可以了,而不是每次都需要cd到存在python.exe的目錄下再執行。除此之外,在安裝其他第三方庫的時候,比如webpy中會省去不少麻煩。除了上面直接下載可執行檔案的方式安裝之外,你還可以透過原始碼的方式安裝,原始碼方式的安裝可以透過–prefixe=filepath來指定安裝路徑。
修改系統路徑辦法:我的電腦->右鍵“屬性”->選擇“高階系統設定”->選擇“環境變數”->選擇“系統變數”->單擊Path屬性,把python.exe目錄新增進去。如下圖所示:
修改後的Path:C:\Program Files (x86)\Common Files\NetSarang;C:\Python27(註意每個路徑之間使用分號隔開)
安裝之後執行cmd,然後直接輸入python進入python輸入命令樣式:
eclipse安裝python外掛
當python安裝完成之後,還需要eclipse支援python的開發。這時候需要eclipse中新增pydev的外掛。開啟eclipse然後具體步驟如下:
help->install new software->在彈出的視窗中單擊add->在彈出的視窗中輸入下麵截圖內容
單擊OK等待載入出的內容,在載入出的內容中選擇pydev安裝包,然後點選next開始安裝,安裝過程中詢問關於許可權相關內容直接選擇同意。安裝成功之後,eclipse選擇重啟。重啟之後可以在Window->preference中看到PyDev的選項,下一步的工作就是為PyDev選擇python直譯器。在eclipse中安裝直譯器的步驟如下:
Window->preference->PyDev->Interpreters->Python Intepreter,具體如下圖所示:
在出現的視窗中單擊new,在彈出的視窗中選擇你安裝python的目錄中含有python.exe目錄,單擊OK則開始載入python下的包。如下圖所示:
這個時候,eclipse就可以進行python的開發了。其實上述不要忘記python interpreter的設定,其他正常情況下都不會出現問題的。經過上述步驟之後,在eclipse中新建專案就可以看到PyDev Project選項。按照正常的新建原始碼,以python的方式執行,整個過程結束。
webpy安裝
webpy是一個小型的以python開發的基於MTC(Model-Templates-Control)方式開發的一個框架,相比較與Django,它體積是非常小。在功能上沒有Django強大。webpy可以與apache一起結合使用,提高其效能,詳情可以檢視webpy與apache的設定。
安裝webpy可以去webpy官網下載,下載下來直接解壓到某個目錄即可。在這裡選擇解壓到python安裝目錄下麵,解壓後的webpy的目錄如下圖所示:
然後透過python setup.py install安裝。一般python中安裝第三方庫都是透過setup.py安裝,或者easy_install等方式。不同方式也沒有無所謂的優劣之分,純碎是個人習慣和環境了。
在安裝的時候,有可能會報出如下錯誤 import error model utils not exist等類似錯誤。具體錯誤原因是因為上述命令會執行web檔案夾下的__init__.py檔案,其原始碼檔案如下所示:
可以看住該檔案會載入標準庫和web檔案夾下的各種py檔案執行一遍生成pyc檔案以便以後可以主動執行。但是__init__.py在載入其他檔案的時候,因為其他檔案的不在當前python的目錄下,可以透過import sys,然後列印sys.path,看一下當前python目錄。解決辦法是把當前的位置新增進sys.path,即在__init__.py原始碼檔案中新增下麵一句程式碼:
sys.path.append(yourpath)#yourpath則是你webpy所在的目錄。
新增完這兩句程式碼再次執行,就可以安裝成功了。如果不新增上面的程式碼,你也可以透過修改Path路徑在完成安裝的。另外,如果上面你安裝了python而且也修改了Path路徑,那麼這個問題就不會出現。
MySQLdb的安裝
web開發中資料庫是不可缺少的,對於MySQL來說,python有MySQLdb的支援。MySQLdb是python與mysql之間進行連線的一個庫,就像Java與其他資料庫直接使用JDBC一樣。MySQLdb可以直接透過下載msi格式的安裝包直接安裝,下載地址:http://sourceforge.net/projects/mysql-python/
在使用安裝包安裝的時候需要註意,你這個時候必須設定了Path路徑,否則安裝包在安裝的時候是無法找到python的執行路徑的。因為是編譯好的安裝包,你又無法修改原始碼,所以是無法安裝成功的。除此之外需要註意的是python與MySQLdb之間的版本問題也需要一個同意。這是我搭建整個架構的時候遇到的第二個版本的問題。這裡出現的版本問題是“你安裝的python或者MySQLdb是面向32位機器還是64位”。因為MySQLdb只有2.7的版本。python與MySQLdb在機器位數選擇必須統一,否則在使用的時候就會報出如下錯誤:python ImportError: DLL load failed: %1 不是有效的 Win32 應用程式。
除此之外,這裡應該不會出現什麼錯誤。我就是下載了之後直接點選安裝就可以了。
如果是在linux下進行安裝,有可能會報出mysql_config can’t find的錯誤。這因為你沒有安裝libmysqlclient-dev的庫,安裝好之後去修改site.cfg下的mysql_config的路徑,然後就可以了。
在這裡你會發現,很多時候一個框架你不是不會搭建,而是搭建好之後報出的莫名奇妙的錯誤讓人抓狂,而這些莫名奇妙的錯誤大部分都是因為版本之間不相容。
sqlalchemy的安裝
sqlalchemy是一個ORM框架,它提供了ORM應該提供的功能。在JAVA WEB開發中習慣了使用ORM框架,直接使用MySQLdb和資料庫互動不是很習慣,所以又選擇安裝了這個框架。sqlalchemy下載地址是http://www.sqlalchemy.org/。它是對python2和python3都進行了支援,還是很強大的。下載下來解壓,安裝找個和上面安裝webpy沒什麼兩樣,依次走完每個過程就好。
這時候也發現了python開發中需要安裝很多東西,在一個環境下安裝了,換了環境你還要安裝。我平時是在Windows下開發,需要安裝一套。線上的環境是在linux上,尼瑪還要安裝一套。搜尋了一下,在python中也沒找到像maven,ant等類似的工具。
上面這麼多過程還只是框架的搭建,一行程式碼還沒寫已經耗費了好久了。下麵就給出部分的程式碼示例。
程式碼示例
簡單示例
具體例子貼出官網首頁給出的簡單示例:
執行上述程式碼,預設監聽的是8080埠。然後瀏覽器上輸入localhost:8080,就可以看到網頁上輸出Hello world。你第一個webpy專案就這樣成功了。
webpy中form表單
web開發中不可避免的就是表單的提交,在webpy中也提供了表單的強大支援,透過後端程式碼的定義結合模版,讓表單可以輕鬆完成。詳細教程請檢視官網連線-form表單使用
在開發的過程中在你的模版定義中需要註意的是$def with form這句程式碼一定要位於第一行第一列,否則就會報出syntax invalid的錯誤,具體示例如下:
需要註意的一點是,在接受前端資料的後端的post方法頂一個中,你必須首先呼叫form的validatest方法,否則的話,你就無法或得到前端傳遞過來的資料。
個人專案
下麵就是我整個專案的程式碼架構:
該專案主要功能的是註冊,登入。其中註冊部分使用的是webpy的form模組,資料庫層使用的orm框架sqlalchemy。透過DAOLayer把資料庫介面層封裝起來,對外提供友好介面;utils封裝了常用的介面;Const負責讀取資料庫的配置資訊。主要程式碼結構就是上述。
其中需要註意的是存放css/js的static檔案夾,必須和啟動類同一個層次目錄,另外就是檔案名必須為static,略蛋疼。
問題
安裝整個過程遇到的問題挺多,但是回頭去看看,大部分是自己疏忽,部分問題是不瞭解導致比如版本問題,還有部分是對框架的使用不熟悉導致。下麵就列出一些問題
版本問題主要出現在python與webpy、python與MySQLdb兩部分。
webpy不熟悉導致中form表單生成問題,程式碼示例中已經給出提示
讀取配置檔案的時候無法直接讀取json或者dict格式,解決辦法是參考了SO上的回答
sqlalchemy不熟悉導致插入資料之後,資料庫無資料的問題,原因是add之後沒有commit
form表單的生成一直異常,這個已經在上文中說明。生成陳述句必須在html中第一行表示
登入成功之後跳轉失敗,這是url之間的相對路徑沒搞好
頁面之間的資料傳值問題
補充一下linux中的安裝:
開發系統需要移植到linux中,噩夢開始了。在安裝中首先是MySQLdb安裝,透過setup.py去安裝,一直出現ImportError: No module named setuptools.初始理解是setuptools模組沒有安裝,但是安裝其他模組的時候可以使用python setup.py安裝的啊。繼續google,看到有篇文章提到許可權、sudo兩個關鍵詞。我擦。瞬間明瞭了,是不是許可權不夠。因為安裝其他模組的時候,也提示許可權不夠,後來使用sudo搞定的。試了一下,尼瑪果真是許可權不夠。你這安裝錯誤提示也太尼瑪操蛋了吧。
許可權問題解決,但是出現另一個錯誤EnvironmentError: mysql_config not found。google了一下,一種說法是沒有安裝msyql的client還有connector,但是我保證是安裝了啊;另一種說法是MySQLdb的配置檔案中沒有指示正確mysql_config路徑,去看了下MySQLdb的安裝時候讀取的配置檔案site.cfg,果真看到配置是一個預設被註釋掉的選項,但是我mysql_config不是處在預設位置,修改了該配置選項指向我係統所在的位置,安裝成功。
sqlalchemy安裝好之後在啟動的時候報:
sqlalchemy.exc.OperationalError: (OperationalError) (2002, “Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)”) None None
該錯誤就是在說sqlalchemy在連線mysql的時候在固定位置找不到mysql的socket的檔案。所以就透過如下幾種方式去檢視
1:首先看mysql是否啟動,沒啟動肯定就不會有socket的檔案
2:啟動之後看了mysql的配置檔案發現,它是採用的預設配置,是把socket配置到tmp目錄下了
3:檢視如何更改sqlalchemy尋找mysql的啟動檔案socket的位置,結果就是修改瞭如下:
“mysql+mysqldb://” + Const.USERNAME + “:” + Const.PASSWD + “@” + Const.HOST + “/” + Const.DBNAME + “?charset=utf8&use;_unicode=0&unix;_socket=/tmp/mysql.sock”
同理,在MySQLdb連線的時候也需要修改socket配置
《Linux雲端計算及運維架構師高薪實戰班》2018年09月17日即將開課中,120天衝擊Linux運維年薪30萬,改變速約~~~~
*宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。
– END –
更多Linux好文請點選【閱讀原文】哦
↓↓↓