Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Flask Просмотр локальной папки в браузере, работа с файлами [RSS Feed]

#1 Авг. 22, 2017 11:26:07

gmaksim
От: Россия
Зарегистрирован: 2017-07-17
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask Просмотр локальной папки в браузере, работа с файлами

А если совсем проще - как указать некий маршрут, условно до папки внутри проекта, чтобы она просто открывалась а-ля ftp? Просто просмотрщик директории, напрямую.
Посмотрел документацию, получилось это сделать в aiohttp (одной простой строчкой), а во flask ни в какую.

Офлайн

#2 Авг. 22, 2017 13:55:44

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Flask Просмотр локальной папки в браузере, работа с файлами

gmaksim
покажи код на aiohttp

Офлайн

#3 Авг. 23, 2017 01:06:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9843
Репутация: +  853  -
Профиль   Отправить e-mail  

Flask Просмотр локальной папки в браузере, работа с файлами

Поправил немного код и шаблон из первого сообщения. Картинка грузится и выводится потом в списке.



Прикреплённый файлы:
attachment dirs-2017-08-23-090241.tar (80,0 KБ)

Офлайн

#4 Авг. 23, 2017 11:40:59

gmaksim
От: Россия
Зарегистрирован: 2017-07-17
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask Просмотр локальной папки в браузере, работа с файлами

sander
gmaksim
покажи код на aiohttp
 path_to_static_folder = 'какая-то папка для просмотра в браузере (локальная, внутри проекта)'
 app.router.add_static('/', path_to_static_folder, show_index=True)

Отредактировано gmaksim (Авг. 23, 2017 11:48:13)

Офлайн

#5 Авг. 23, 2017 14:18:45

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Flask Просмотр локальной папки в браузере, работа с файлами

gmaksim
статитка не длятого нужна. можешь сделать такой костыль и во фласке

 app = Flask(__name__, static_folder="твоя папка", static_url_path="/")

Офлайн

#6 Авг. 23, 2017 14:56:07

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Flask Просмотр локальной папки в браузере, работа с файлами

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()

templates/list.html
 <!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)

Прикреплённый файлы:
attachment dir_viewer.zip (1,1 KБ)

Офлайн

  • Начало
  • » Web
  • » Flask Просмотр локальной папки в браузере, работа с файлами[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version