Форум сайта python.su
А если совсем проще - как указать некий маршрут, условно до папки внутри проекта, чтобы она просто открывалась а-ля ftp? Просто просмотрщик директории, напрямую.
Посмотрел документацию, получилось это сделать в aiohttp (одной простой строчкой), а во flask ни в какую.
Офлайн
gmaksim
покажи код на aiohttp
Офлайн
Поправил немного код и шаблон из первого сообщения. Картинка грузится и выводится потом в списке.
Прикреплённый файлы:
dirs-2017-08-23-090241.tar (80,0 KБ)
Офлайн
sander
gmaksim
покажи код на aiohttp
path_to_static_folder = 'какая-то папка для просмотра в браузере (локальная, внутри проекта)' app.router.add_static('/', path_to_static_folder, show_index=True)
Отредактировано gmaksim (Авг. 23, 2017 11:48:13)
Офлайн
gmaksim
статитка не длятого нужна. можешь сделать такой костыль и во фласке
app = Flask(__name__, static_folder="твоя папка", static_url_path="/")
Офлайн
gmaksim
набросал простой рабочий вариант
результат
app.py
import os from functools import wraps from flask import Flask, render_template, send_file, abort app = Flask(__name__) app.debug = True TOP_DIR = app.root_path def normalize_path(path, follow_symlinks=True): # resolves symbolic links if follow_symlinks: return os.path.realpath(path) return os.path.abspath(path) def is_safe_path(basedir, path): return path.startswith(basedir) def check_and_transform_path(f): @wraps(f) def wrapper(*args, **kwargs): path = normalize_path(kwargs.get("path", TOP_DIR)) if not is_safe_path(TOP_DIR, path) or not os.path.exists(path): abort(404) kwargs["path"] = path return f(*args, **kwargs) return wrapper @app.route('/') @app.route('/<path:path>') @check_and_transform_path def dir_viewer(path=None): entries = os.scandir(path) prev_dir = None if path and path != TOP_DIR: prev_dir = os.path.relpath(os.path.dirname(path), TOP_DIR) return render_template("list.html", entries=entries, prev_dir=prev_dir) @app.route("/download/<path:path>") @check_and_transform_path def download(path): return send_file(path) if __name__ == '__main__': app.run()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> {% if prev_dir %} <li><a href="{{ url_for("dir_viewer", path=prev_dir) }}">..</a></li> {% endif %} {% for entry in entries %} <li> {% if entry.is_file() %} <a href="{{ url_for("download", path=entry.path) }}">{{ entry.name }}</a> {% else %} <a href="{{ url_for("dir_viewer", path=entry.path) }}">{{ entry.name }}</a> {% endif %} </li> {% endfor %} </ul> </body> </html>
Отредактировано sander (Авг. 23, 2017 15:01:09)
Прикреплённый файлы:
dir_viewer.zip (1,1 KБ)
Офлайн