Wednesday 15 September 2010

python - Flask-Security: how to set up the database outside the main py file? -



python - Flask-Security: how to set up the database outside the main py file? -

i'm using flask-security 1.7.4 flask 0.10.1.

i have no problem running website if database scheme stored in python file app.py:

from flask.ext.security import rolemixin, usermixin, sqlalchemyuserdatastore, security flask.ext.sqlalchemy import sqlalchemy app = flask(__name__) #create database connection object db = sqlalchemy(app) #define models roles_users = db.table('roles_users', db.column('user_id', db.integer(), db.foreignkey('user.id')), db.column('role_id', db.integer(), db.foreignkey('role.id'))) class role(db.model, rolemixin): id = db.column(db.integer(), primary_key=true) name = db.column(db.string(80), unique=true) description = db.column(db.string(255)) class user(db.model, usermixin): id = db.column(db.integer, primary_key=true) email = db.column(db.string(255), unique=true) companyid = db.column(db.string(255), unique=true) lastname = db.column(db.string(255)) firstname = db.column(db.string(255)) password = db.column(db.string(255)) active = db.column(db.boolean()) confirmed_at = db.column(db.datetime()) roles = db.relationship('role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) # setup flask-security user_datastore = sqlalchemyuserdatastore(db, user, role) security = security(app, user_datastore)

however separate more code can have:

app_folder |__ app.py # main file app |__ security.py # file contain database login/roles

so tried:

in security.py:

db = sqlalchemy() # define models roles_users = db.table( 'roles_users', db.column('user_id', db.integer(), db.foreignkey('user.id')), db.column('role_id', db.integer(), db.foreignkey('role.id')) ) class role(db.model, rolemixin): id = db.column(db.integer(), primary_key=true) name = db.column(db.string(80), unique=true) description = db.column(db.string(255)) class user(db.model, usermixin): id = db.column(db.integer, primary_key=true) email = db.column(db.string(255), unique=true) companyid = db.column(db.string(255), unique=true) lastname = db.column(db.string(255)) firstname = db.column(db.string(255)) password = db.column(db.string(255)) active = db.column(db.boolean()) confirmed_at = db.column(db.datetime()) roles = db.relationship('role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) user_datastore = sqlalchemyuserdatastore(db, user, role)

and in app.py:

from flask.ext.security import rolemixin, usermixin, sqlalchemyuserdatastore, security flask.ext.sqlalchemy import sqlalchemy security import db, user_datastore app = flask(__name__) #initiate database connection object db.init_app(app) # setup flask-security security = security(app, user_datastore)

and i'm getting next errors:

file "c:\work\pythonvirtualenv\env02\lib\site-packages\sqlalchemy\engine\default.py", line 436, in do_execute cursor.execute(statement, parameters) operationalerror: (operationalerror) no such table: users u'select users.user_id users_user_id, users.username users_username, users.password users_password, users.email users_email, users.registered_on users_registered_on \nfrom users \nwhere users.password = ? , users.email = ?\n limit ? offset ?' (u'test', u'demo@demo.com', 1, 0)

the things is, if maintain code in app.py works flawlessly. , of course of study database exists.

can please tell me i'm doing wrong?

thanks :)

you should utilize different construction (and advised one):

proj_folder - run.py - config.py |__ app # main folder app |__ __init__.py |__ models.py |__ security.py |__ views.py

on models maintain app models on security maintain security models on views create views , expose urls

then on init.py

import logging flask import flask flask.ext.appbuilder import sqla flask.ext.appbuilder import appbuilder sqlalchemy import sqlalchemy logging.basicconfig(format='%(asctime)s:%(levelname)s:%(name)s:%(message)s') logging.getlogger().setlevel(logging.debug) app = flask(__name__) app.config.from_object('config') db = sqlalchemy(app) app import models, security, views

on run.py

from app import app app.run(host='0.0.0.0', port=8080, debug=true)

hope helps

take @ https://github.com/dpgaspar/flask-appbuilder-skeleton

python flask flask-security

No comments:

Post a Comment