2017-05-02 9 views
0

私はスケルトンを作成しようとしていますが、login/adminにフラスコセキュリティを使用しています。私のアプリのフォルダ内フラスコセキュリティを実装しようとしています

私は私のアプリを作成する機能を持っている:

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 
from flask_security import Security, SQLAlchemyUserDatastore 

from .views.home import home_blueprint 
from .views.contact import contact_blueprint 
from .views.login import login_blueprint, bcrypt, login_manager 
from .models import db 
from .models.user import User, Role 

def create_app(): 
    app = Flask(__name__, instance_relative_config=True) 
    db.init_app(app) 
    bcrypt.init_app(app) 
    login_manager.init_app(app) 
    app.register_blueprint(home_blueprint) 
    app.register_blueprint(contact_blueprint) 
    app.register_blueprint(login_blueprint) 
    app.config.from_object('config') 
    user_datastore = SQLAlchemyUserDatastore(db, User, Role) 
    security = Security(app, user_datastore) 
    return app 

私がテストにダミーの管理者ユーザーを作成しようとすると、今問題がアップします。 これには、スケルトンルートフォルダにcreate_db.pyファイルがあります。

from app import create_app 
from sqlalchemy import exists 
from flask_security.utils import encrypt_password 

from app.models import db 
from app.models.user import Role, User 

create_app().app_context().push() 
db.create_all() 

user_role = Role(name='user') 
db.session.add(user_role) 
db.session.commit() 

super_user_role = Role(name='superuser') 
db.session.add(super_user_role) 
db.session.commit() 

user_role = Role(name='user') 
super_user_role = Role(name='superuser') 
admin_user = user_datastore.create_user(
    username='admin', 
    email='admin', 
    password=encrypt_password('admin'), 
    confirmed_at=datetime.datetime.now(), 
    roles=[user_role, super_user_role] 
) 
db.session.commit() 

これを実行すると、私はNameErrorを取得します:user_datastoreは定義されていませんか?物語の目的のために

は、私が最初にフラスコログインを実装し、データベースを作成得ることができました。可変user_datastore create_db.pyファイルで

答えて

1

は、従ってエラー存在しません。あなたはcreate_dy.py(未テスト)で、次のような何かを行うことができます:

app = create_app() 
app.app_context().push() 
# get the app security instance 
security = app.extensions.get('security') 
# or like this 
# security = app.extensions['security'] 


# ... etc 

# Use the security api to create users 
admin_user = security.datastore.create_user(
    username='admin', 
    email='admin', 
    password=encrypt_password('admin'), 
    confirmed_at=datetime.datetime.now(), 
    roles=[user_role, super_user_role] 
) 

# ... etc 

はまた、私はあなたのcreate_app()機能にする必要がわかりません。

関連する問題