Ошибка атрибута: модуль ‘flask.app’ не имеет атрибута ‘route’

#python-3.x #flask

#python-3.x #flask

Вопрос:

У меня есть autocomplete функция как отдельный файл — autocomplete.py . Автозаполнение импортируется в init.py следующим образом:

 from xyzapp.autocomplete import autocomplete
  

Строка, которая выдает ошибку в autocomplete.py заключается в следующем:

 @app.route('/autocomplete',methods=['GET'])
  

Структура приложения использует чертежи и выглядит следующим образом:

 appcontainer
     |
     |--run.py
     |      
     |
     |--xyzapp
          |--__init__.py
          |--autocomplete.py
          |--blueprint_folder_1
          |--blueprint_folder_2
          |--static
  

Все сообщение об ошибке выглядит следующим образом:

  @app.route('/autocomplete',methods=['GET'])
 AttributeError: module 'flask.app' has no attribute 'route' 
  

Есть идеи, что я делаю не так?

Обновить:

The autocomplete.py выглядит следующим образом:

 from flask import Flask, render_template, redirect, url_for, request, session, flash, app, Blueprint, jsonify

@app.route('/autocomplete',methods=['GET'])
def autocomplete():
    database='backbone_test'
    db=client[database]
    all_names=list(db.ids.find({},{"current_name":1,"_id":0}))
    return json.dumps(all_names) 
  

__init__.py Файл выглядит следующим образом:

 from flask import Flask, render_template, Blueprint, jsonify, session
import jinja2

class MyApp(Flask):
  def __init__(self):
    Flask.__init__(self, __name__)
    self.jinja_loader = jinja2.ChoiceLoader([self.jinja_loader,jinja2.PrefixLoader({}, delimiter = ".")])
    def create_global_jinja_loader(self):
        return self.jinja_loader

    def register_blueprint(self, bp):
        Flask.register_blueprint(self, bp)
        self.jinja_loader.loaders[1].mapping[bp.name] = bp.jinja_loader

app = MyApp()

from xyzapp.autocomplete import autocomplete
from xyzapp.blueprint_folder_1.some_file import bp_1

app.register_blueprint(bp_1)
  

Комментарии:

1. Просто хотел убедиться, что у вас есть функция под ним, в конце концов, @app это функция декоратора.

Ответ №1:

В autocomplete.py похоже, что вы импортируете app из Flask , а не из своего __init__.py файла. Вместо этого попробуйте импортировать из __init__.py .

Комментарии:

1. у меня в моем xyz было ‘from flask import *’, который загружает приложение из flask. измените приложение в инициализации на myapp, и оно должно работать

Ответ №2:

сначала импортируйте Flask, запустите ваше приложение

 from flask import Flask
app = Flask(__name__)
  

Комментарии:

1. Как вы можете видеть, я импортирую Flask и запускаю приложение. По-прежнему не работает

2. ваш код в этой строке: из flask импортируйте Flask, render_template, перенаправление, url_for, запрос, сеанс, flash, приложение, Blueprint, jsonify вы импортируете приложение из flask, попробуйте импортировать его из формы инициализации , используйте это (из . импортировать приложение)

Ответ №3:

Извините, это немного затянуто, я не знаком с этим способом запуска приложения Flask, но, похоже, вы создаете свой собственный экземпляр класса Flask с именем MyApp и инициализируете его в переменной app.

Я не уверен на 100% и могу быть совершенно неправ, но я думаю, что ваша проблема заключается в __init__ из MyApp

Ответ №4:

Вы импортировали Flask в your.py ? Дважды проверьте и добавьте отсутствующий.

Комментарии:

1. Да, у меня есть следующая строка в autocomplete.py: from flask import Flask, render_template, redirect, url_for, request, session, flash, app, Blueprint, jsonify

2. Это не ответ. Это может быть комментарий.