Arhn - архитектура программирования

Ссылка на местоположение приложения в Flask Blueprint

У меня есть план, где у меня есть форма загрузки. Я пытаюсь сохранить файлы, но не могу понять, как указать правильный каталог. Когда я использую app.instance_path, он выдает сообщение об ошибке:

NameError: имя «приложение» не определено

Как я могу объявить правильное расположение папки для хранения файла из Flask Blueprint?

Вот мой файл init.py:

# External libraries
from flask import Flask


# Import the resources
from . import students

def create_app(configfile=None):
    app = Flask(__name__)

    app.register_blueprint(students.bp)

    return app

Вот мой файл схемы student.py:

import os

from flask import (
    Blueprint, flash, g, redirect, render_template, request, session, url_for
)

from werkzeug.utils import secure_filename

from SIMPLE.forms import ImportStudentsForm

bp = Blueprint('students', __name__, url_prefix='/students')

@bp.route('/import', methods=('GET', 'POST'))
def import_students():
    # Load the register form
    form = ImportStudentsForm(request.form)

    if form.validate_on_submit():

        f = request.files['file']
        filename = secure_filename(f.filename)
        f.save(os.path.join(
            app.instance_path, 'uploads',  filename
        ))

        # Flash success
        flash('Sucessfully registered.', 'success')

    return render_template('students/batch_import_students.html', form=form)

Любое руководство будет высоко оценено. Спасибо.

12.11.2020

Ответы:


1

Вы получаете сообщение об ошибке, потому что вы не импортировали app в students.py. Вы можете импортировать его (и рисковать циклическим импортом), но более элегантный способ — получить экземпляр приложения через flask.current_app.

Добавьте from flask import current_app в начало students.py и замените app.instance_path на current_app.instance_path.

12.11.2020

2

Попробуй это ::

from flask import current_app

А ТАКЖЕ

f.save(os.path.join(current_app.instance_path, 'uploads',  filename))

Вы используете фабрику приложений. Таким образом, здесь нет объекта «приложение». Независимо от того, какое приложение в данный момент используется, его можно получить с помощью current_app, а затем вы сможете с ним работать.

Кроме того, если instance_path не работает, попробуйте current_app.root_path

12.11.2020
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..