Правильно ли импортировать объект в колбу?Колба не может импортировать имя почты - PullRequest
2 голосов
/ 17 мая 2019

Я новичок в колбе и начал создавать это небольшое приложение, я хочу отправлять электронные письма, но когда колба импортирует конфигурацию файла init , я получаю сообщение об ошибке "ImportError: не могу импортировать имя почты ". Я уже читал, что это связано со структурой моего приложения, но я не могу приспособить его, поэтому нет проблем. спасибо за вашу помощь

Это структура моего приложения:

└── my-project
    ├── app
    │   ├── __init__.py
    │   ├── constants
    │   │   ├── __init__.py
    │   │   ├── constants.py
    │   │   
    │   ├── models
    │   │    └── __init__.py
    │   │    ├── conectionDB.py
    │   │    ├── Erros.py
    │   │    ├── Session.py
    │   │    ├── Users.py
    │   │
    │   ├── resources
    │   │   ├── __init__.py
    │   │   └── Mail.py
    │   │   └── Session.py 
    │   ├── utils
    │   │   ├── __init__.py
    │   │   └── api_v1.py      
    │   
    ├── database
    │      ├── init.sql
    │
    ├── config
    │   ├── __init__.py
    │   ├── default.py
    │   
    └── api.py

api.py

import os
from app import app

if __name__ == '__main__':
    app.run(host=os.environ["API_IP"], port=5000, debug=os.environ["API_DEBUG"])

app / __ init __. Py

from flask import Flask
from flask_mail import Mail
from app.apiL import blueprint as apiL

# logging.config.fileConfig('config/development-logging.conf')

app = Flask(__name__)
app.config.from_object('config.default')


# app.config.from_pyfile('config.py')
app.register_blueprint(api_v1)
mail = Mail(app)

ресурсы / Mail.py

from app import mail # you can now import the Mail() object
from flask_mail import Message


class EmailSend:

    def send_email(subject, sender, recipients, text_body):
        msg = Message(subject=subject, sender=sender, recipients=recipients)
        msg.body = text_body
        #msg.html = html_body
        mail.send(msg)

При выполнении появляется следующее сообщение:

| Traceback (most recent call last):
api_1  |   File "api.py", line 2, in <module>
api_1  |     from app import app
api_1  |   File "/usr/src/api/app/__init__.py", line 5, in <module>
api_1  |     from app.api_v1 import blueprint as api_v1
api_1  |   File "/usr/src/api/app/api_v1.py", line 4, in <module>
api_1  |     from app.resources.Session import nsLogIn, nsSignUP, nsVerifyEmail
api_1  |   File "/usr/src/api/app/resources/Session.py", line 19, in <module>
api_1  |     from app.resources.Mail import EmailSend
api_1  |   File "/usr/src/api/app/resources/Mail.py", line 1, in <module>
api_1  |     from app import mail  # you can now import the Mail() object
api_1  | ImportError: cannot import name 'mail'

спасибо за вашу помощь.

1 Ответ

0 голосов
/ 17 мая 2019

Возможно, у вас есть проблема круговой зависимости.В файле resources / Mail.py попробуйте импортировать почтовый модуль внутри функции send_email.

Ваш файл resources / Mail.py будет выглядеть примерно так:

from flask_mail import Message


class EmailSend:

    def send_email(subject, sender, recipients, text_body):
        from app import mail # you can now import the Mail() object
        msg = Message(subject=subject, sender=sender, recipients=recipients)
        msg.body = text_body
        #msg.html = html_body
        mail.send(msg)

Пожалуйста, посмотрите ImportError: невозможно импортировать письмо с именем во Flask и ImportError: невозможно импортировать письмо с именем .

...