Python芹菜小鬼

2024-04-20 09:16:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我通过运行app.py来启动我的应用程序,它导入我的应用程序(其中添加了蓝图和配置)和芹菜。在

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

在那之前一切都很好。我可以运行我的烧瓶应用程序和芹菜工人。在

但是当我试图从一个蓝图中的控制器中触发一个任务时,就像这里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个小时,但没有找到解决方案。 我希望这里有人能帮我。在

空气中是否有一个松弛的烧瓶?在

提前谢谢。在


Tags: infrompycommunityimportauthaddapp
1条回答
网友
1楼 · 发布于 2024-04-20 09:16:27

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='theobouwman98@gmail.com',
        #     password=hashed
        # )
        # user.save()
    return redirect(url_for('auth.login'))

相关问题 更多 >