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.