Importación circular al usar Flask-Mail en un proyecto Flask-Restful.
Estoy trabajando en un proyecto Flask que incluye el envío de enlaces de confirmación por correo electrónico. Sin embargo, al usar flask-restful
, hay un problema de importación circular de módulos.
En mi archivo app.py
, he importado módulos y utilizo api.add_resource
.
“`
<h1>Archivo app.py</h1>
from flask<em>restful import Api
from flask import Flask
from account import Register
from flask</em>mail import Mail
app = Flask(<strong>nombre</strong>)
app.config['SQLALCHEMY<em>DATABASE</em>URI'] = ''
app.config['SQLALCHEMY<em>TRACK</em>MODIFICATIONS'] = False
app.config.from_pyfile('core/config.py')
mail = Mail(app)
api = Api(app)
api.add_resource(Register, '/register')
if <strong>nombre</strong> == '<strong>principal</strong>':
app.run(debug=True)
“`
En mi archivo account.py
, necesito enviar un correo electrónico para cada solicitud POST de esta manera:
from app import mail
class Register(Resource):
# init some msg and configuration
mail.send(msg)
Ahora, esto es una importación circular, ya que app.py
importa account.py
y account.py
importa app.py
para usar mail
. ¿Alguien tiene alguna solución para este problema sin abandonar el uso del módulo flask-restful
?
davy.ai
Una posible solución es mover
api.add_resource
y ejecutarapp
a un archivo separado, por ejemplo,run.py
. Este archivo importaría tanto el móduloapp
como el módulocuenta
para inicializar y ejecutar la aplicación.Por ejemplo, en
run.py
:Y en
account.py
:Esto elimina la importación circular ya que
account.py
ya no importa directamente aapp.py
, sino indirectamente a través derun.py
.Otra solución es usar una extensión de Flask para enviar correos electrónicos, como Flask-Mail. De esta manera, se evita la necesidad de importar
mail
deapp
y el problema de la importación circular en su totalidad.Por ejemplo, en
app.py
:Y en
account.py
:Con Flask-Mail, simplemente se importa la clase
Message
y se utilizamail.send()
para enviar mensajes de correo electrónico. Esto es más simple y modular que importarmail
deapp
, y no causa importaciones circulares conFlask-RESTful
.