导言
第一次开发微信小程序,计划使用云开发,调用云函数。而后端的算法涉及到自然语言处理,因此我们决定使用python作为后端的语言,不过不巧的是python不支持云函数。因此决定将代码上传服务器并对外提供api。再在微信小程序中调用api,而微信小程序中调用api的方式也非常简便,这将在文章最后进行讲述。现在首要任务是能够实现python代码的api,使微信小程序能够调用后端的函数。在指导老师的建议下决定使用apache+wsgi+flask。下面我将对这系列流程进行图文讲述。
what is Apache?
Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
简而言之,只要将网页设置在Apache上,外界就能够访问这个网页。
一、配置Apache
1.下载
下载Apache(官方网址):http://httpd.apache.org/
点击下载后进入后下一个界面再点击
Files for Microsoft Windows
进入下一个界面再点击
ApacheHaus
ok,现在让我们开始下载Apache
2.启动apache服务
下载好之后会有一个Apache24压缩包,我们将其解压至自己的某个路径下,并且
现在启动一下apache服务
输入地址访问:
http://localhost/ 显示下面的这个界面即代表apache安装成功。
二、安装mod_wsgi
flask自带的开发Web服务器表现很差,响应慢,而且直接通过nginx进行反向代理,经常无法响应请求。有两个可以在生产环境中使用、性能良好且支持Flask程序的服务器,分别是Gunicorn和uWSGI,但是这两个模块不提供对window的支持。
因此我们需要使用mod_wsgi这个模块使得flask能够在apache上进行部署,mod_wsgi模块是一个python写的Apache的FastCGI模块。
下载编译好的 mod_wsgi
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
我下载的是下面这个版本的(上面的是老图)
下载好之后进行安装
在命令行下,进入自己下载的python下面的Script文件执行下面的命令
pip3 install "mod_wsgi-4.5.15+ap24vc14-cp36-cp36m-win_amd64.whl"
安装成功后再运行下面的命令
mod_wsgi-express module-config
重点:将执行mod_wsgi-express module-config后控制台中显示的这三行内容拷贝到 http.conf 中
我这里显示的是
LoadFile "c:/users/administrator/appdata/local/programs/python/python39/python39.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python39/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win_amd64.pyd"
WSGIPythonHome "c:/users/administrator/appdata/local/programs/python/python39"
具体在这个位置
重新启动Apache
没有报错则表示 mod_wsgi 模块在加载成功了。
注:很多教程都是用的mod_wsgi.so,但是已经找不到对应的版本的了。
三、创建工程并安装flask
在自己工程下执行下面的命令
pip install Flask
在工程下面创建这两个文件,一个py文件,一个wsgi文件(后面我把wsgi文件改成了py文件一样的可以运行)
下面是test.py的内容
下面是test.wsgi的内容
四、修改apache配置文件
打开Apache/conf/httpd.conf。
重启apache服务
仅仅是我这里命名的为Apache16,具体名字要看自己。
在浏览器访问自己设置的链接在浏览器访问自己设置的链接http://自己服务器的ip地址/flasktest/hello?name=CZY
这里解释一下整个链接的组成:
- http://后面接自己服务器的ip地址
- flasktest:是之前在httpd.conf文件里面设置的,你在文件里面如果写的是其他的字符串,那么链接这个地方也会对应的修改
- hello:是因为test.py里面flask设置的路径,在app.route()里面设置的
- name=CZY:这个部分是参数,需要由调用的地方传参数进来。由于我们在py文件里使用了request.args.get()所以调用接口的地方必须给我们传这么一个参数。如果我们接口里面没有写这句话,调用时就不需要传。
最后展示一下访问链接得到的结果
至此,就实现了python对外提供api(后续会更新微信小程序调用api的方法)