基于windows10系统Python web开发相关安装文档

来源:互联网 发布:淘宝鞋店推荐女鞋 编辑:程序博客网 时间:2024/05/21 21:50

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位软件包。

wamp下载地址:http://www.wampserver.com/en/(本文用wamp配置)
    xmapp下载地址:https://www.apachefriends.org/zh_cn/index.html

本文是安装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驱动

下载地址:https://pypi.python.org/pypi/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

mod_wsgi可在http://www.lfd.uci.edu/~gohlke/pythonlibs/依赖库找到


首先在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’字段。


浏览器输入http://127.0.0.1:5000,可看到修改:


但Apache那边没修改,浏览器输入自己的虚拟域名,需要Apache重启:


6.   MVC模板开发

有别于php的MVC框架开发,Python一般以MTV框架开发web,这边有大概web开发详细参考http://www.cnblogs.com/mysql-dba/p/6070258.html

controller目录:MVC中的C,主要存放视图函数

model目录:MVC中的M,主要存放实体类文件,映射数据库中表

templates:MVC中的V,存放html文件

static:静态文件,主要存放css,js等文件

__init__.py:模块初始化文件,Flask 程序对象的创建必须在 __init__.py 文件里完成, 然后我们就可以安全的导入引用每个包。

setting.py:配置文件,数据库用户名密码等等

具体Flask开发参考:http://blog.csdn.net/xdhstc/article/details/52217030

   

结合上面知识,把第二节获取到的数据库信息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


原创粉丝点击