搭建Flask开发环境并在nginx上使用uwsgi部署
2015年10月30日
本来就想学习一门python的web框架,正好有需求要写个api,半天时间用flask写完接口,功能是从数据库中读取用户id,以json串格式返回。flask入门不难,简单看了文档的第一节就写好这个功能。在Nginx上部署的时候花了些力气,下面记录一下。
测试环境
CentOS 6
Python 2.6
Flask-0.10.1
数据库IP:192.168.1.1
api测试域名:api.xnow.me
安装Flask环境
安装Flask,先安装easy_install,然后安装pip,再用pip安装Flask,因为我习惯用pip安装各种Python库。
yum -y install python-setuptools mysql-devel python-devel
easy_install pip
pip install flask
pip install Flask-MySQL
API脚本代码
这段代码是从名为mydb的数据库中,在users表里找到username对应的uid,并以json形式返回,结构很简单:
#!/usr/bin/python
from flask import Flask
from flaskext.mysql import MySQL
import json
app = Flask(__name__)
mysql=MySQL()
app.config['MYSQL_DATABASE_HOST'] = "192.168.1.1"
app.config['MYSQL_DATABASE_USER'] = "root"
app.config['MYSQL_DATABASE_PASSWORD'] = "123456"
app.config['MYSQL_DATABASE_DB'] = "mydb"
mysql.init_app(app)
def GetUid(username):
conn = mysql.connect()
cur=conn.cursor()
cur.execute("select uid from users where username='" + username + "'");
data=cur.fetchall()
if len(data):
conn.commit()
return json.dumps({username:str(data[0][0])})
else:
return json.dumps({"error":"Not found"})
@app.route('/api/user/<username>')
def ReturnUid(username):
return GetUid(username)
if __name__=='__main__':
app.run(host = '0.0.0.0')
使用python执行这个脚本,会监听本机的5000端口。测试获取admin用户的uid,命令如下(服务器上没浏览器可用啦),可知admin的uid是0:
$ curl http://localhost:5000/api/user/admin
{"admin": "0"}
配置部署环境
现在配置uwsgi和Nginx,首先安装这两个软件:
yum -y install nginx
pip install uwsgi #yum仓库中也有安装包,但yum装好uwsgi和python的插件之后还是不能用
uwsgi配置文件,app.ini,经测试,这个配置文件似乎需要和api.py放在同一目录下才能生效
[uwsgi]
base = /data/program/myapi #存放api脚本的目录
app=api #脚本的名字
module = %(app)
socket= /tmp/app.sock
chmod-socket=666 #使用套接字方式,设置sock文件路径和权限
callable = app
logto = /tmp/%n.log #%n是变量,即配置文件的文件名,不要ini扩展名
启动uwsgi,会按上面的配置,在/tmp目录下生成日志和sock文件,uwsgi的配置项很丰富,如果追求性能的话,值得好好研究,这里只算可用的demo而已。
uwsgi --ini /data/program/myapi/app.ini
nginx的部分配置文件
server {
listen 80;
server_name api.xnow.me;
charset utf-8;
client_max_body_size 75M;
location / { try_files $uri @yourapplication; }
location @yourapplication {
include uwsgi_params;
uwsgi_pass unix:/tmp/app.sock;
}
}
启动nginx
service nginx start
使用浏览器测试下
根据返回值获得数据,zhangs的uid是1
现在只是简单的看了flask的第一节,很有趣的样子,接下来还得好好学习下这个框架!
当前暂无评论 »