Flask — динамическое создание и загрузка файлов в папки

У меня есть папка, содержащая три папки. Как это:

  -folder -folder1 -demo.txt-folder2-folder3  

Код Python для загрузки выглядит так :

  def upload (): files = request.files.getlist ('file') taskname = request.form.get ('taskname') для файла в файлах: file  .save ('/'. join (['static', taskname, file.filename]))  

HTML-форма содержит следующие компоненты:

     

С приведенным выше кодом я получаю следующую ошибку:

  Нет такого файла или каталога: 'static/task2/folder1/demo.txt'  

Я не нашел подобных вопросов и решений.
Следует ли мне разбирать все имена файлов и создавать папки вручную?


Вы также может создавать папки динамически при загрузке файлов с помощью pathlib. Ваши файлы будут выглядеть, как показано ниже:

 /static/files/task_name/#uploaded files are here/task_name/#other loaded files  

app.py

  import osimport pathlibfrom flask import Flask, render_template, requestfrom werkzeug.utils import secure_filenameapp = Flask (__ name __) app.config ['SECRET_KEY'] =  '^% huYtFd90; 90jjj'app.config [' UPLOADED_FILES '] =' static/files'@app.route ('/upload', methods = ['GET', 'POST']) def upload (): если запрос  .method == 'POST' и 'photos' в request.files: uploaded_files = request.files.getlist ('photos') имя_задачи = request.form.get ('task_name') filename = [] pathlib.Path (app.  config ['UPLOADED_FILES'], task_name) .mkdir (exist_ok = True) для файла в uploaded_files: filename = secure_filename (file.filename) file.save (os.path.join (app.config ['UPLOADED_FILES'], task_name,  имя файла)) вернуть имя_задачи return render_template ('upload.html') if __name__ == "__main__": app.run (debug = True)  


Начало работы ed с Flask — документация Domino Docs 4.3

Следующее руководство настроит ваш проект Domino как полноценный веб-сайт на базе Flask. Это несложно; вам просто нужно убедиться, что все папки и файлы находятся на своих местах, чтобы приложение работало правильно.

Создание структуры приложения¶

Во-первых, вам нужно будет создать структуру приложения. Далее мы обсудим каждую область по очереди.

Обратите внимание, что /mnt — это ваш каталог файлов в Domino. Также важны следующие имена: app.sh , __ init__.py , /static , / шаблоны . Помимо этого, в этой статье все можно настроить по своему вкусу.

/mnt | - ... | - app.sh | -  run.py | -/flask_app | - __init__.py | - просмотры. py | -/static | -/templates 

Создание папок¶

В разделе «Файлы» Domino создайте новую папку с именем flask_app. Это будет пакет Python, который будет содержать веб-приложение.

Поместите в папку flask_app две другие папки, одна из которых называется static , а остальные шаблонами код>. В папку static вы помещаете свои статические файлы, а в папку templates вы помещаете файлы шаблонов. Папки static иtemplates будут распознаны Flask, чтобы знать, откуда можно получить соответствующие файлы. Можно изменить, какая папка будет отмечена как статическая папка, но обычно оставляют ее как static .

Создание файлов¶

Создание файла __ init__.py в папке flask_app. Этот файл превратит flask_app в пакет Python. В этот файл поместите следующее:

 from flask import Flaskclass ReverseProxied (object): def __init __ (self, app): self.app = app def __call__  (self, environment, start_response): имя_сценария = environment.get ('HTTP_X_SCRIPT_NAME', '') if имя_сценария: environment ['SCRIPT_NAME'] = имя_сценария path_info = environment ['PATH_INFO'] если path_info.startswith (имя_сценария): Environment [  'PATH_INFO'] = path_info [len (script_name):] return self.app (Environment, start_response) app = Flask (__ name __) app.wsgi_app = ReverseProxied (app.wsgi_app) 

Вернувшись в раздел файлов Domino, создайте новый файл с именем run.py .

В run.py добавьте следующее:

 from flask_app import appfrom flask_app import viewsif __name__ == '__main__': app.run () 

Измените файл app.sh в разделе «Файлы» Domino на:

!/usr/bin/env bashexport FLASK_APP = run.pyexport FLASK_DEBUG = 1python -m flask run  --host = 0.0.0.0 --port = 8888 

Настройка¶

Теперь мы собираемся добавить файл views.py . В этом файле вы размещаете всю логику приложения, и он должен быть создан в каталоге flask_app.

Мы создадим очень простое приложение, которое просто возвращает «Hello World!»

Добавьте в views.py следующее :

from flask_app import app@app.route ('/') def index (): return "Hello  World! "

Если у вас есть шаблон в папке шаблонов, вы должны добавить:

 from flask import render_templatefrom flask_app import app@app.route ('/') def index (): return render_template ('hello.html') 

Тестирование¶

Теперь, когда вы опубликуете приложение, когда вы переходите по URL-адресу своего приложения, вы должны увидеть «Hello World!»

Оцените статью
clickpad.ru
Добавить комментарий