On my previous post, I’ve been working with Flask,SQLAlchemy, and Gnunicorn for some REST API.
Setting up virtualenv with the following pip requirements.
Flask==0.6.1 Flask-SQLAlchemy==0.11 Jinja2==2.5.5 LEPL==5.0.0 MySQL-python==1.2.3 SQLAlchemy==0.6.6 Werkzeug==0.6.2 distribute==0.6.10 gevent==0.13.4 greenlet==0.3.1 gunicorn==0.12.1 lockfile==0.9.1 wsgiref==0.1.2 yolk==0.4.1
The model.py:
from flask import Flask
from flaskext.sqlalchemy import SQLAlchemy
from sqlalchemy import Table, Column, Integer, String, Date, Float
import config
# DB class
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = config.DB_URI
db = SQLAlchemy(app)
# DB classess
class Player(db.Model):
__tablename__ = 'player'
playerid = db.Column('playerid', Integer, primary_key=True)
username = db.Column('username', String(30), unique=True)
email = db.Column('email', String(50), unique=True)
password = db.Column('password', String(100), unique=False)
avatarid = db.Column('avatarid', Integer,default=1)
language = db.Column('language', Integer,default=1)
regdate = db.Column('regdate', Date)
activation_key = db.Column('activation_key', String(60))
active = db.Column('active', Integer, default=0)
def __init__(self, username=None, email=None,password=None):
self.username = username
self.email = email
self.password = password
def __repr__(self):
return '<Player %s %s>' % (self.username, self.email)
Contents of config.py:
dbhost = 'localhost' dbuser = 'root' dbpass = 'mysql' dbname = 'mp' DB_URI = 'mysql://' + dbuser + ':' + dbpass + '@' + dbhost + '/' +dbname
Contents of mp.py:
# Filename: mp.py
import datetime
import hashlib
import string,random
# config file
import config
from flask import Flask, jsonify, request
## app and db is defined on model.py
from model import db, app, Player
# other misc functions
def get_user_id(username):
p = Player.query.filter_by(username=username).first()
if p is not None:
return p
return None
def get_userid_by_email(email):
p = Player.query.filter_by(email=email).first()
if p is not None:
return p
return None
def get_user_key(key):
p = Player.query.filter_by(activation_key=key).first()
if p is not None:
return p
return None
# url routing
@app.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
@app.after_request
def shutdown_session(response):
db.session.remove()
return response
@app.route('/')
def hello_world():
return "Hello World!"
@app.route('/users/')
def list_players():
players = Player.query.all()
app.logger.debug("Player length %s ", len(players))
a = ""
d = {}
for p in players:
app.logger.debug(p.username)
a = a + " " + p.username
return "Hello Players: %s " % (a)
if __name__ == '__main__':
app.debug = True
app.run(host='0.0.0.0')
The MySQL, with MP database and Player table:
CREATE TABLE player (
playerid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(50) NOT NULL,
username VARCHAR(30) NOT NULL,
password VARCHAR(100) NOT NULL,
avatarid INT(4) unsigned not null default '1',
language INT(2) unsigned not null default '1',
regdate timestamp(9),
activation_key varchar(60),
active int(1) unsigned not null default '0'
)
To simply run:
python mp.py * Running on http://0.0.0.0:5000/ * Restarting with reloader...
If you want to use the Gunicorn, then refer to my old post using Running Flask with Gunicorn.