基於windows10系統Python web開發相關安裝文件
1. 確定環境
本文部署環境為windows10(64bit)
web環境為Wamp3.0.6 64bit(Apache2.4.23 + mysql5.7.14) + mod_wsgi4.5.17+ flask0.12.2 + python3.6
2. 安裝Wamp
根據自己喜好選擇自己的web包管理(因為自身流淌著php的血液,windows環境喜歡Apache,mysql,php都封裝好的包管理服務,如果是Linux環境會選擇Nginx替代Apache),一般都選擇wamp或者xmapp,但注意需要確定版本,比如裝64位之後的軟體都統一為64位軟體包。
本文是安裝Apache2.4.23,執行wamp服務端
啟動所有服務(Apache,mysql)
綠色為開啟成功,黃色則部分成功,需檢查錯誤,一般為80埠被佔用。
再執行localhost檢檢視是否報錯(一般報錯會出現在網頁下方紅字資訊)
(因為第四節翻寫了專案vhost介面,把Apache介面服務給遮蔽了,可以跳過此步驟內容)下面配置Apache讓其他電腦訪問自己的主機
Apache設定中httpd.conf檔案下進行配置,一般所在檔案位置D:\wamp64\bin\apache\apache2.4.23\conf\httpd.conf,或者wamp伺服器左鍵選擇如下:
接著找到Require local,將Require local修改為Require allgranted,AllowOverride None修改為AllowOverride All這樣操作當然安全係數會調低。儲存並重啟Apache即可。(2.2版本Apache是Deny from all改成Allow from all)。最後記得關閉防火牆就可訪問了!
3. 安裝PyMySQL
上文已安裝好Wamp,也就安裝好了Mysql,還需要裝MySQL-python驅動
查閱MySQL-python-1.2.5.zip 發現只支援py2.7,好吧查閱其他資料
由於MySQLdb模組還不支援Python3.x,所以Python3.x如果想連線MySQL需要安裝pymysql模組。PyMySQL是在Python3.x版本中用於連線MySQL伺服器的一個庫,Python2中則使用mysqldb。所以需要pip install PyMySQL。但如果你使用的是pycharm IDE,則可以使用project python安裝第三方模組。
由於Python統一了資料庫連線的介面,所以 pymysql 和 MySQLdb 在使用方式上是類似的。寫個python程式碼測試下資料庫,自行建表呼叫。
# -*-coding: utf-8 -*-
import pymysql.cursors
# 連線資料庫
connect =pymysql.Connect(
host='localhost',
port=
3306,
user='root',
passwd='',
db='zhitong_ikeeko_ai',
charset='utf8'
)
# 獲取遊標
cursor =connect.cursor()
# 查詢資料
sql = "SELECT
*FROM lesson_work WHERE lesson_item_id = '%s' "
data = ('100')
cursor.execute(sql % data)
for rowincursor.fetchall():
print(row)
print('共查找出',cursor.rowcount,'條資料')
# 關閉連線
cursor.close()
connect.close()
執行結果正常。
4. 安裝flask
根據專案需求選擇自己的python web開發端框架,一般介面端用flask框架,企業級頁面用django(web2py還沒支援python3.6)安裝。(其實Anaconda都安裝好了flask)安裝直接pip install flask即可,安裝成功後在python命令下看import flask看是否報錯。
通過Flask,建立神奇的Hello World程式:
1. 專案檔案目錄如下:
2. _init_.py建立Flask例項:
# -*-coding: utf-8 -*-
from flaskimportFlask
#建立專案物件
app =Flask(__name__)
import views
3. run.py建立啟動指令碼:
# -*-coding: utf-8 -*-
from __init__importapp
app.run(debug =True)
#app.run(host=0.0.0.0,debug= True) #除錯頁面若要其他機子訪問需設定host
4.views.py,加入下面程式碼
# -*-coding: utf-8 -*-
from __init__importapp
@app.route('/',methods=['GET','POST'])
def index():
return "Hello World!"
執行程式碼後,可在對應網頁輸入網址檢視,一般沒指定埠的話localhost:5000可看到頁面顯示 Hello World!。但是這個伺服器還不能滿足需求。需要開發穩定架構web端伺服器,比如介面程式供其他人員呼叫。
5. 搭建web伺服器
Web伺服器架構如下:
本文配置為Apache2.4.23 + mod_wsgi4.5.17+ flask0.12.2 + python3.6 ,起初本想選擇更好的uwsgi協議,無奈Gunicorn,uwgsi都不支援windows,那就乖乖用mod_wgsi
首先在Apache下配置mod_wsgi,需要使Apache httpd伺服器載入wsgi_module擴充套件。將下載的mod_wsgi.whl修改後綴名為zip並解壓,把mod_wsgi.so置於Apache server安裝目錄的modules檔案下,在httpd.conf檔案中新增如下一行:LoadModule wsgi_module modules/mod_wsgi.so。
假若解壓後找不到mod_wsgi.so,(我用的最新版是找不到的)OK往下看:
1.先用pip該whl安裝
2.執行Anaconda prompt 輸入 mod_wsgi-express module-config命令
3.複製那三行到wamp服務端的httpd.conf檔案下進行修改(一般所在檔案位置D:\wamp64\bin\apache\apache2.4.23\conf\httpd.conf,或者wamp伺服器託管圖示左鍵Apache選擇httpd.conf如下)
新增如下內容:
LoadFile"d:/anaconda3/python36.dll"
LoadModule wsgi_module"d:/anaconda3/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "d:/anaconda3"
#指定website的app.wsgi配置檔案路徑,這裡可以不用設定,相當於#localhost會指向自己的網頁,而不指向wamp伺服器。
#具體網頁配置在下面,第一個引數為網頁路由路徑,第二個引數為具體的專案所在。
#這裡先以app.wsgi為解析入口
#WSGIScriptAlias / C:/Users/Administrator/Desktop/ai.ikeeko/app.wsgi
#指定專案路徑
WSGIPythonPath C:/Users/Administrator/Desktop/ai.ikeeko
<Directory C:/Users/Administrator/Desktop/ai.ikeeko>
<Files app.wsgi>
Require all granted
</Files>
</Directory>
4.既然定義解析入口app.wsgi,現在建立編寫解析入口,在所在專案新建py檔案,寫下以下指令碼程式碼:
#-*- coding: utf-8 -*-
import sys
sys.path.insert(0, 'c:/Users/Administrator/Desktop/ai.ikeeko/') #工程根目錄,即wsgi檔案的路徑
from __init__ import app as application #這裡的__init__就是指向__init__.py
儲存檔案後,修改後綴名為app.wsgi
5.修改httpd-vhosts相關資訊
開啟Apache虛擬主機服務httpd.conf檔案下
# Virtual hosts
# Include conf/extra/httpd-vhosts.conf
將上面的#去掉就可以引入虛擬主機的配置檔案了(一般Wamp是開啟的)。
在C:\wamp64\bin\apache\apache2.4.23\conf\extra\httpd-vhosts.conf或者wamp伺服器左鍵中Apache可選httpd-vhosts.conf修改如下:(為了讓外部機子都可訪問該網頁,我把自帶的wamp的vhost內容給遮蔽。新增新的域名介面,並規定Require all granted同時定義了Errorlog的相關資訊,如果報錯可檢視專案中該檔案)
# Virtual Hosts
#
#<VirtualHost *:80>
# ServerName localhost
# DocumentRoot D:/wamp64/www
# <Directory "D:/wamp64/www/">
# Options +Indexes+Includes +FollowSymLinks +MultiViews
# AllowOverride All
# Require local
# </Directory>
#</VirtualHost>
<VirtualHost *:80>
ServerName ai.ikeeko.local
DocumentRootC:/Users/Administrator/Desktop/ai.ikeeko
ErrorLog"C:/Users/Administrator/Desktop/ai.ikeeko/error.log"
WSGIScriptAlias /C:/Users/Administrator/Desktop/ai.ikeeko/app.wsgi
<Directory"C:/Users/Administrator/Desktop/ai.ikeeko/">
<Filesapp.wsgi>
Options -Indexes +FollowSymLinks
Require all granted
AllowOverride All
WSGIScriptReloading On
</Files>
</Directory>
</VirtualHost>
#
6.修改windows的host相關資訊,輸入專案域名會重定向到本地指定路由:
在C:\Windows\System32\drivers\etc\hosts補上如下
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 ai.ikeeko.local
::1 ai.ikeeko.local
7.測試網頁
把上面編寫的flask網頁test.py放在專案工程裡,開啟瀏覽器執行專案域名:
6. 除錯模式
傳統使用Python的web框架時,想把修改的程式立即呈現在瀏覽器上,只需在程式碼修改為app.run(debug=True)。進入除錯模式會出現以下程式碼。
* Restarting with stat
* Debugger is active!
* Debugger PIN: 189-797-646
* Running on http://127.0.0.1:5000/(Press CTRL+C to quit)
(好吧,我用Spyder啟動不了flask的除錯模式,一直卡在*Restarting with stat,最後用了PyCharm執行,沒出現這個問題)自此,每次更新程式碼,flask都會reload,然後反饋到瀏覽器上。
當然,在用Python的web框架(DJango或Flask)部署在Apache上。當專案程式碼有更新時,我們希望Apache能夠自動地reload程式碼。將Python web專案部署在Apache上需要藉助mod_wsgi。mod_wsgi具有兩種工作模式,分別是Embedded process和Daemon process。前者的wsgi程式是Apache程序直接管理和呼叫的,因此當專案程式碼更改時,必須restart或者reload Apache才能達到程式碼更新的目的。而後者Apache為wsgi程式啟動了一個守護程序,類似於FastCGI的後臺,mod_wsgi會借Apache的外殼,另外啟動一個或多個程序,然後通過socket通訊和Apache的程序聯絡,即獨立於Apache程序的程序。其效果是,當web專案中的wsgi指令碼有變化時,該守護程序就會被重啟。該重啟過程中,自然專案程式碼也就被reload進入記憶體了。
Windows環境:WSGIDaemonProcess 在Windows 中不會被執行, 使用上面的配置 Apache 會拒絕執行,估計等以後版本解決吧。
所以windows除錯方法只能用傳統方法,用PyCharm先跑基本py檔案測試完,再統一重啟Apache更新。
嗯簡單測試,隨便修改’Hello World’欄位。
但Apache那邊沒修改,瀏覽器輸入自己的虛擬域名,需要Apache重啟:
6. MVC模板開發
controller目錄:MVC中的C,主要存放檢視函式
model目錄:MVC中的M,主要存放實體類檔案,對映資料庫中表
templates:MVC中的V,存放html檔案
static:靜態檔案,主要存放css,js等檔案
__init__.py:模組初始化檔案,Flask 程式物件的建立必須在 __init__.py 檔案裡完成, 然後我們就可以安全的匯入引用每個包。
setting.py:配置檔案,資料庫使用者名稱密碼等等
結合上面知識,把第二節獲取到的資料庫資訊lesson_work以get方式回覆介面:
參考文件:
1.《apache+mod_wsgi+flask 環境搭建》http://blog.csdn.net/yo746862873/article/details/52098658
2.《Flask + mod_wsgi + Apache on Windows 部署成功》http://blog.csdn.net/firefox1/article/details/46438769