我正在为一个电子商务站点编写注册/登录系统,并使用flask security(http://pythonhosted.org/Flask-Security/)来处理注册功能。基本设置的一部分需要以下signup.py模块:
from flask.ext.security import SQLAlchemyUserDatastore, Security
from app.models import User, Role
from app import app, db
# Setup Flask Security
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)
然后,我必须将user_数据存储和安全对象导入views.py模块,如下所示:
from app.signup import user_datastore, security
问题是,一旦我将上面的import语句包含到我的views模块中,我的整个应用程序就会崩溃,并且当我尝试运行我的单元或行为测试(为可读性而编辑)时,会得到以下回溯错误
======================================================================
ERROR: Failure: AttributeError ('_FakeSignal' object has no attribute 'connect_via')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/nose/loader.py", line 413, in loadTestsFromName
addr.filename, addr.module)
File "/Library/Python/2.7/site-packages/nose/importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/Library/Python/2.7/site-packages/nose/importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/Users/faiyamrahman/programming/Python/WebApps/NibsNWhiskeyFull/tests/test_database.py", line 6, in <module>
from app import app, db, models
File "/Users/faiyamrahman/programming/Python/WebApps/NibsNWhiskeyFull/app/__init__.py", line 9, in <module>
from app import views, models
File "/Users/faiyamrahman/programming/Python/WebApps/NibsNWhiskeyFull/app/views.py", line 7, in <module>
from app.signup import user_datastore
File "/Users/faiyamrahman/programming/Python/WebApps/NibsNWhiskeyFull/app/signup.py", line 7, in <module>
security = Security(app, user_datastore)
File "/Users/faiyamrahman/programming/Python/WebApps/NibsNWhiskeyFull/flask/lib/python2.7/site-packages/flask_security/core.py", line 346, in __init__
self._state = self.init_app(app, datastore, **kwargs)
File "/Users/faiyamrahman/programming/Python/WebApps/NibsNWhiskeyFull/flask/lib/python2.7/site-packages/flask_security/core.py", line 368, in init_app
identity_loaded.connect_via(app)(_on_identity_loaded)
AttributeError: '_FakeSignal' object has no attribute 'connect_via'
我不知道这是什么意思。我试过阅读烧瓶安全文档,但我不明白为什么会发生这种情况。多亏有人捅了一刀!
简短回答:您缺少blinker库。 编辑:您确认虚拟环境找不到blinker,然后重新安装了它。
长答案:
我认为错误来自Flask Signals。从信号看这个代码:
所以我认为代码试图找到
blinker
库,在您的例子中,它无法导入它,因此它试图使用_FakeSignal
类。_FakeSignal
类没有定义如下所示的connect_via
属性Flask Security尝试加载的
connect_via
属性实际上是由blinker
库提供的,由于没有闪烁,因此没有连接。因此它失败了。所以你应该先安装闪光灯。不过,我认为烧瓶安全代码在尝试使用
connect_via
之前也应该检查blinker
。对于未来的互联网用户:
我犯了同样的错误,但原因不同。我使用的是anaconda的虚拟环境,我认为这与flask的自动重新加载系统相冲突(它未能正确加载一次,修复错误没有改变任何东西,甚至编辑了blinker.py文件)。打开一个新的控制台来运行修复了它。
抱歉,我没有更多的信息可以提供,但希望这能帮助别人。
相关问题 更多 >
编程相关推荐