Круговые зависимости EVE python - PullRequest
0 голосов
/ 09 мая 2019

Я предпочитаю хранить свои модели в отдельных файлах.В общем, я предпочитаю определенное разделение файлов.Мое первое впечатление от EVE было очень позитивным, но сейчас мне очень трудно создать управляемую структуру приложения для более крупного проекта:
мои классы "auth" требуют импорта "app"
модели требуют своего конкретного«auth» класс
, а в «settings.py» вам нужны модели для создания приложений -> ад зависимости
Может кто-нибудь выслать мне совет или ссылку на хороший шаблон?

EVE App/
├── models/
│   ├── user.py
│   ├── ...
│   
│  
├── run.py
├── settings.py
├── auth.py
│   
└── ...

1 Ответ

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

вы можете попробовать что-то подобное, это может работать:

app / __ init __. Py

from eve import Eve
from flask import current_app, request

# database
from .database import db

# blueprints
from users import blueprint1
from todo import blueprint2

create_app()
    def set_username_as_none(username):
        resource = request.endpoint.split('|')[0]
        return  current_app.data.driver.db[resource].update(
            {"user" : username},
            {"$set": {"user": None}},
            multi=True
        )

    app = Eve()

    # SQL Possible Solution 1
    # register sqlalchemy to this app
    with app.app_context():
        db.init_app(app)
        Migrate(app, db)
        if not database_exists(db.engine.url):
            create_database(db.engine.url)
            print('Database créée : ' + str(database_exists(db.engine.url)))

    # SQL Possible Solution 2
    db.init_app(current_app)
        Migrate(current_app, db)
        if not database_exists(db.engine.url):
            create_database(db.engine.url)
            print('Database créée : ' + str(database_exists(db.engine.url)))

    # register the blueprint to the main Eve application
    app.register_blueprint(blueprint1)
    app.register_blueprint(blueprint2)
    # bind the callback function so it is invoked at each user deletion
    app.users_deleted += set_username_as_none

    return app

run.py

instance = create_app()
instance.run()

app / Models /... В каждой модели

from ..database import db

class Plop(db.model):

app / database.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy() # you can override model there ex : model=MyModel
...