开发环境准备
- 安装python 3.4 及pip,注意:flask目前版本不支持3.6的python
- 安装pycharm,pycharm作为 python的GUI开发调试工具使用起来很方便,在pycharm上可以直接创建flask项目。
开发
启动pycharm,创建flask项目。
在开始开发前,需要引入几个必须的包,他们是:
- sqlalchemy
- flask-sqlalchemy
- pydoc
建立32位与sql数据库连接的dsn,如果系统是64位的,需要到C:\Windows\SysWOW64下启动odbcad32.exe创建dsn。
配置项目的python运行环境,在pycharm中 alt+ctrl+s 进入项目的设置,选择 project interpreter ,设置python的运行环境,选择python3.4作为运行环境。
为了测试系统运行,在sqlserver management studio中创建testflask表,包括Id_P, LastName, FirstName,Address, City属性并添加几行数据。在模型中必须指定某个字段的primary key。
示例代码如下(run.py):
from flask import Flask, jsonify, request from flask_sqlalchemy import SQLAlchemy from sqlalchemy.sql import func app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mssql+pyodbc://username:password@dsn'#(替换成自己的用户名,密码和dsn) db = SQLAlchemy(app) class testflask(db.Model): #创建model,对应数据库中的表 Id_P = db.Column(db.Integer, primary_key=True) LastName = db.Column(db.String(255)) FirstName = db.Column(db.String(255)) Address = db.Column(db.String(255)) City = db.Column(db.String(255))
@app.route('/test/list', methods=['GET']) def get_data(): myData = testflask.query.all() output = [] for record in myData: r_data = {} r_data['Id_P'] = record.Id_P r_data['FirstName'] = record.FirstName r_data['LastName'] = record.LastName r_data['Address'] = record.Address r_data['City'] = record.City output.append(r_data) return jsonify({'message': output}) if __name__ == '__main__': app.run(debug=True)
示例代码结束
运行代码,在浏览器中url: http://127.0.0.1:5000/ test/list 测试
部署(flask+nginx+tornado)
- 下载 nginx ,安装:解压,复制到c:\目录下
- 配置 nginx: 配置C:\nginx-1.14.0\conf目录下nginx.conf 文件,设置 location / {proxy_pass http://localhost:5000;
- 使用netstat -ano|findstr "80" 查看是否该端口被占用,如果被占用需要改端口
- 安装python3.4.3 下载路径:https://download.csdn.net/download/qq_27532427/8817105 ,3.6.5的不支持 flask
- 安装 virtualenv: 到pip目录下C:\Python34命令行运行 :pip install virtualenv ,用管理员用户启动power shell,如在windows server power shell命令行下,执行:.\pip install virtualenv 。在c盘创建部署目录 :c:\restService,创建虚拟环境,在c:\restService 目录下,执行:virtualenv -p "c:\Python34\python.exe" restService --distribute --no-site-package ,
- 在创建的虚拟目录下的pip路径下安装项目所依赖的包:.\pip install xxx,将依赖包安装到虚拟环境下
- Flask
- sqlalchemy
- flask-sqlalchemy
- pyodbc 等
- tornado
7.创建tornado托管程序tornado_server.py 与主程序同一个目录下,代码为:
#coding=utf-8
#!/usr/bin/python
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from run import app #与上述代码相同
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000) #flask默认的端口,可任意修改
IOLoop.instance().start()
8 创建32位dns.
9 启动虚拟环境和python,在虚拟环境安装路径C:\restService\restService\Scripts,.\activate 启动虚拟环境 ;
Python tornado_server.py 启动应用程序
10. 启动 nginx : 命令行: start nginx
11. 最后就是测试http请求。