1. 程式人生 > >基於windows10系統Python web開發相關安裝文件

基於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