Как придать структуру приложению Python колбу

Я новичок в колбе питона

Экспериментирование с некоторыми конечными точками с MongoDB, как показано ниже в одном файле

from flask import Flask, request
from flask.ext.mongoalchemy import MongoAlchemy
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['MONGOALCHEMY_DATABASE'] = 'library'
db = MongoAlchemy(app)


class Author(db.Document):
    name = db.StringField()


class Book(db.Document):
    title = db.StringField()
    author = db.DocumentField(Author)
    year = db.IntField();


@app.route('/author/new')
def new_author():
    """Creates a new author by a giving name (via GET parameter)
    e.g.: GET /author/new?name=Francisco creates a author named Francisco
    """
    author = Author(name=request.args.get('name', ''))
    author.save()
    return 'Saved :)'






@app.route('/authors/')
def list_authors():
    """List all authors.

    e.g.: GET /authors"""
    authors = Author.query.all()
    content = '<p>Authors:</p>'
    for author in authors:
        content += '<p>%s</p>' % author.name
    return content

if __name__ == '__main__':
    app.run()

Над кодом, который содержит две конечные точки для публикации и получения данных, которые работают нормально

Знайте, ищите способ разделить код на другой файл, например

код, связанный с подключением к базе данных, должен находиться в другом файле

from flask import Flask, request
from flask.ext.mongoalchemy import MongoAlchemy
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['MONGOALCHEMY_DATABASE'] = 'library'
db = MongoAlchemy(app)

Я должен быть в состоянии получить ссылку на БД в разных файлах, где схема определяется и использовать его

class Author(db.Document):
    name = db.StringField()


class Book(db.Document):
    title = db.StringField()
    author = db.DocumentField(Author)
    year = db.IntField();

и маршруты будут другим файлом

@app.route('/author/new')
def new_author():
    """Creates a new author by a giving name (via GET parameter)
    e.g.: GET /author/new?name=Francisco creates a author named Francisco
    """
    author = Author(name=request.args.get('name', ''))
    author.save()
    return 'Saved :)'






@app.route('/authors/')
def list_authors():
    """List all authors.

    e.g.: GET /authors"""
    authors = Author.query.all()
    content = '<p>Authors:</p>'
    for author in authors:
        content += '<p>%s</p>' % author.name
    return content

Здесь, в файле конечных точек, я должен получить ссылку на схему базы данных, пожалуйста, помогите мне в получении этой структуры

Укажите на какой-нибудь понятный пример или видео, которые могут мне помочь, я новичок в Python, а также на флешке. Укажите пример и помогите узнать больше, спасибо

1 ответ

Решение

Базовая структура может выглядеть так:

/yourapp  
    /run.py  
    /config.py  
    /yourapp  
        /__init__.py
        /views.py  
        /models.py  
        /static/  
            /main.css
        /templates/  
            /base.html  
    /requirements.txt  
    /venv

Применительно к вашему примеру это будет выглядеть так.

run.py: запустите ваше приложение.

from yourapp import create_app

app = create_app()
if __name__ == '__main__':
    app.run()

config.py: содержит конфигурацию, вы можете добавить подклассы, чтобы различать конфигурацию разработки, тестовую конфигурацию и производственную конфигурацию

class Config:
    DEBUG = True
    MONGOALCHEMY_DATABASE = 'library'

yourapp / __ init__.py: Инициализация вашего приложения с созданием экземпляра Flask. (Также делает ваше приложение пакетом).

from flask import Flask
from flask.ext.mongoalchemy import MongoAlchemy
from config import Config

db = MongoAlchemy()

def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)

    db.init_app(app)

    from views import author_bp
    app.register_blueprint(author_bp)

    return app

yourapp / models.py: содержит ваши различные модели.

from . import db

class Author(db.Document):
    name = db.StringField()


class Book(db.Document):
    title = db.StringField()
    author = db.DocumentField(Author)
    year = db.IntField();

yourapp / views.py: также иногда называется rout.py. содержит ваши конечные точки URL и связанное с ними поведение.

from flask import Blueprint
from .models import Author

author_bp = Blueprint('author', __name__)

@author_bp.route('/author/new')
def new_author():
    """Creates a new author by a giving name (via GET parameter)
    e.g.: GET /author/new?name=Francisco creates a author named Francisco
    """
    author = Author(name=request.args.get('name', ''))
    author.save()
return 'Saved :)'

@author_bp.route('/authors/')
def list_authors():
   """List all authors.     
   e.g.: GET /authors"""
   authors = Author.query.all()
   content = '<p>Authors:</p>'
   for author in authors:
       content += '<p>%s</p>' % author.name
   return content

(в вашем случае это не обязательно)yourapp / static /... Содержит ваши статические файлы.

yourapp / templates /.. Содержит ваши шаблоны.

needs.txt имеет снимок ваших зависимостей пакета.

Папка venv (Virtualenv), в которой ваши python-библиотеки могут работать в изолированной среде.

Рекомендации:

Посмотрите на этот связанный вопрос.

Хороший пример широко используемой структуры проекта.

Другие вопросы по тегам