Как избежать циклического импорта на этом веб-сайте, а также успешно добавить класс к миграцииPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать циклического импорта на этом веб-сайте, а также успешно добавить класс к миграции

Сообщение Anonymous »

Я работаю над приложением Flask с SQLAlchemy и Flask-Migrate. У меня возникла проблема с циклическим импортом, которую я не могу решить. Вот упрощенная версия структуры моего проекта:

Код: Выделить всё

Website1
|- app.py
|- models.py
|- form.py
|- templates
код для app.py:

Код: Выделить всё

import os
from flask import Flask , render_template , url_for , redirect
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from dotenv import load_dotenv
from models import Person
from form import AddForm , DelForm

load_dotenv()

app = Flask(__name__)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')

basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+os.path.join(basedir,'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

Migrate(app,db)

@app.route('/')
@app.route('/index')
def index():

return render_template('index.html')

@app.route('/add_person' , methods=['GET' , 'POST'])
def add_person():
# from models import Person
form = AddForm()
if form.validate_on_submit():
name = form.name.data
age = form.age.data
p1 = Person(name , age)
db.session.add(p1)
db.session.commit()
return redirect(url_for('list_guys'))
return render_template('add.html' , form=form)

@app.route('/del_form' , methods=['POST' , 'GET'])
def del_form():
# from models import Person
form = DelForm()
if form.validate_on_submit():
id = form.id.data
m = db.session.get(Person,id)
db.session.delete(m)
db.session.commit()
return redirect(url_for('list_guys'))
return render_template('del.html', form=form)

@app.route('/list_guys')
def list_guys():
# from models import Person
people1 = Person.query.all()
return render_template('list.html', people1=people1 )

if __name__ == '__main__':
app.run(debug=True)
код для models.py:

Код: Выделить всё

from app import db

class Person(db.Model):
__tablename__ = 'people'
id = db.Column(db.Integer , primary_key =True)
name = db.Column(db.Text)
age = db.Column(db.Integer)

def __init__(self , name , age):
self.name = name
self.age = age

def __repr__(self):
return f"{self.name} has a age of {self.age}"

Когда я пытаюсь запустить приложение, я сталкиваюсь с циклической ошибкой импорта, поскольку models.py импортирует базу данных из app.py, а app.py импортирует Person из models.py. Если я перенесу импорт Person внутрь функций маршрута в app.py, это решит проблему циклического импорта, но тогда я столкнусь с проблемами при использовании Flask-Migrate. Таблица Person не создается в базе данных, и я получаю ошибки при попытке добавить объекты.
Как мне правильно структурировать приложение Flask, чтобы избежать проблем циклического импорта, сохраняя при этом возможность Flask- Мигрировать, чтобы работать корректно? Будем очень признательны за любые рекомендации!

Подробнее здесь: https://stackoverflow.com/questions/790 ... ration-suc
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»