Python Alchemy Blueprint中的应用程序工厂初始化问题
我对应用程序工厂的初始化有问题。我正在使用蓝图和炼金术。 这是我的程序结构Python Alchemy Blueprint中的应用程序工厂初始化问题,python,flask,flask-sqlalchemy,flask-wtforms,blueprint,Python,Flask,Flask Sqlalchemy,Flask Wtforms,Blueprint,我对应用程序工厂的初始化有问题。我正在使用蓝图和炼金术。 这是我的程序结构 App_v1 app.py config.py App_Py main __init__.py forms.py views.py static templates __init__.py app_v1.db models.py app.py from App_Py i
App_v1
app.py
config.py
App_Py
main
__init__.py
forms.py
views.py
static
templates
__init__.py
app_v1.db
models.py
app.py
from App_Py import create_app
app=create_app()
if __name__=='__main__':
app.run(debug=True,port=4044)
config.py
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config(object):
SECRET_KEY = ‘wdsfqsqdsqsdfqsqsdsq’
SQLALCHEMY_DATABASE_URI = 'sqlite:///'+os.path.join(basedir,'app_v1.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
应用程序
init.py
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
from config import Config
db = SQLAlchemy()
migrate=Migrate()
login_manager = LoginManager()
login_manager.login_view = 'users.login'
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
db.init_app(app)
migrate.init_app(app, db)
login_manager.init_app(app)
from App_Py.main.views import main
app.register_blueprint(main)
return app
models.py
from App_Py import db,login_manager
from werkzeug.security import generate_password_hash,check_password_hash
from flask_login import UserMixin
类用户(db.Model,UserMixin):
在主文件夹内
views.py
当我运行程序时,在命令提示符下点击Python时,我无法承诺创建用户数据库:
from App_Py import db
from App_Py.models import User
u= User(username=‘dqfq’,email=‘one@one.com’,password=‘test’)
db.session.add(u)
db.session.commit()
提交时,出现一个错误,表示无法提交。如何在烧瓶中初始化应用程序工厂。我之所以使用应用程序工厂,是因为我将使用弹性搜索用于以后的目的。
谢谢你的建议
错误:
(venv) iMac:App_Py_v1 symtech$ python
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from App_Py import db
>>> from App_Py.models import User
>>> u=User(username='David',email='david@gmail.com',password='test')
>>> db.session.add(u)
Traceback (most recent call last):
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/sqlalchemy/util/_collections.py", line 999, in __call__
return self.registry[key]
KeyError: 4320752448
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/sqlalchemy/orm/scoping.py", line 153, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/sqlalchemy/util/_collections.py", line 1001, in __call__
return self.registry.setdefault(key, self.createfunc())
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/sqlalchemy/orm/session.py", line 2950, in __call__
return self.class_(**local_kw)
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 141, in __init__
self.app = app = db.get_app()
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/flask_sqlalchemy/__init__.py", line 912, in get_app
'No application found. Either work inside a view function or push'
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.
>>> >>>
我注意到(刚才)您正试图从命令行提交用户。您可能缺少提交到db的任何应用程序上下文。有关从命令行添加用户的解决方案,请参见以下url:
我目前正在使用的另一个解决方案是在main.py甚至create_app函数中添加以下内容
from App_Py import db
from App_Py.models import User
@app.before_first_request
def load_user():
u=User(username='David',email='david@gmail.com',password='test')
db.session.add(u)
db.session.commit()
请提供在调试模式下运行的完整错误消息?我已发布错误。我无法找出问题所在?问题似乎发生在提交函数上。根据错误消息,检查此项以获取可能的解决方案。通过使用app.app_context()进行更改,错误仍然存在。能否将此添加到“代码”字段中的问题中?我看不出你在用什么缩进。
(venv) iMac:App_Py_v1 symtech$ python
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from App_Py import db
>>> from App_Py.models import User
>>> u=User(username='David',email='david@gmail.com',password='test')
>>> db.session.add(u)
Traceback (most recent call last):
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/sqlalchemy/util/_collections.py", line 999, in __call__
return self.registry[key]
KeyError: 4320752448
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/sqlalchemy/orm/scoping.py", line 153, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/sqlalchemy/util/_collections.py", line 1001, in __call__
return self.registry.setdefault(key, self.createfunc())
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/sqlalchemy/orm/session.py", line 2950, in __call__
return self.class_(**local_kw)
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 141, in __init__
self.app = app = db.get_app()
File "/Users/symtech/Desktop/App_Py/App_Py_v1/venv/lib/python3.6/site- packages/flask_sqlalchemy/__init__.py", line 912, in get_app
'No application found. Either work inside a view function or push'
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.
>>> >>>
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
with app.app_context():
db.init_app(app)
migrate.init_app(app, db)
...........
from APP_Py.users.views import users
app.register_blueprint(users)
......
return app
from App_Py import db
from App_Py.models import User
@app.before_first_request
def load_user():
u=User(username='David',email='david@gmail.com',password='test')
db.session.add(u)
db.session.commit()