2017-02-03 99 views
0

我在集成芹菜在我的烧瓶应用程序中遇到问题。 这是回购https://github.com/theobouwman/community-python烧瓶芹菜蟒蛇进口

我通过运行app.py启动我的应用程序,该应用程序导入我的应用程序(添加蓝图和配置)和Celery。

/tasks/add.py我有一个示例任务,并且我为@celery.task装饰器再次导入Celery对象。

到那时,一切正常。我可以运行我的Flask应用程序并运行芹菜工人。

但是,当我试图从一个蓝图中的控制器中触发一个任务,如https://github.com/theobouwman/community-python/blob/master/auth/controllers/RegistrationController.py#L38它说它不能导入它,这是一个逻辑反应。

Traceback (most recent call last): 
    File "app.py", line 2, in <module> 
    from flask_app import app 
    File "/development/projects/python/Community/flask_app.py", line 4, in <module> 
    from auth.routes import auth 
    File "/development/projects/python/Community/auth/routes.py", line 3, in <module> 
    from .controllers import RegistrationController, AuthenticationController, LogoutController 
    File "/development/projects/python/Community/auth/controllers/RegistrationController.py", line 10, in <module> 
    from tasks.add import add 
    File "/development/projects/python/Community/tasks/add.py", line 1, in <module> 
    from app import celery 
    File "/development/projects/python/Community/app.py", line 2, in <module> 
    from flask_app import app 
ImportError: cannot import name 'app' 

我不知道如何解决这个导入周期,这就是这个问题的原因。我搜索了3个小时,但找不到解决方案。 我希望这里有人能帮助我。

空气中是否有烧瓶松弛或Gitter?

在此先感谢。

回答

2

您在RegistrationController.py进口更改为当地一个解决圆形进口:


    from ..blueprint import auth 
    from models import User 
    from flask import redirect, url_for, request, render_template, flash 
    import bcrypt 
    from ..forms.register import SimpleRegistrationForm 
    """ 
    Error in python3.6 app.py 
    Says cyclus import error 
    """ 
    # Comment out the line below # from tasks.add import add 


    @auth.route('/register', methods=['GET', 'POST']) 
    def register(): 
     form = SimpleRegistrationForm(request.form) 
     if request.method == 'POST' and form.validate(): 
      fname = request.form['fname'] 
      sname = request.form['sname'] 
      email = request.form['email'] 
      password = request.form['password'] 
      hashed = bcrypt.hashpw(password.encode('utf-8 '), bcrypt.gensalt()) 

      user = User.select().where(User.email == email) 
      if user.exists(): 
       flash('Er bestaat al een account met dit email adres') 
       return redirect(url_for('auth.register')) 

      user = User(fname=fname, sname=sname, email=email, password=hashed) 
      user.save() 

      flash('Uw account is aangemaakt. Kijk in uw mailbox voor de activatie link') 
      return redirect(url_for('auth.register')) 
     return render_template('pages/register.html', form=form) 


    @auth.route('/register/test') 
    def register_test(): 
     # local import avoids the cycle 
     from tasks.add import add 
     add.delay() 
     # hashed = bcrypt.hashpw('test'.encode('utf-8 '), bcrypt.gensalt()) 
     # user = User(
     #  fname='Theo', 
     #  sname='Bouwman', 
     #  email='[email protected]', 
     #  password=hashed 
     #) 
     # user.save() 
    return redirect(url_for('auth.login')) 
+0

我认为导入模块一样,是对Python的导入规则,对不对? –

+0

它实际上工作。 –

+1

如果这个答案帮助你,请注册并接受! – 2ps