Python - Flask: статическая папка вне корневого каталога - PullRequest
0 голосов
/ 29 декабря 2018

Ради интереса, я пытаюсь понять, как я могу создать сайт с Python и Flask.Этот сайт должен работать на моем собственном компьютере, и я буду единственным клиентом.Пока у меня есть большинство вещей, которые я хочу сделать, но теперь я сталкиваюсь с технической проблемой, которую не могу решить.

На стороне клиента я хочу отображать изображения, которые возвращаются сервером.В my __init__.py я поместил app = Flask(__name__, static_url_path='/static') и в моем HTML-документе <img src="/static/images/2012035.jpg" height="150px">.Это работает как шарм.

Но на самом деле мои изображения находятся в каталоге d:\genealogie\documenten, который находится вне каталога приложения, и я не хочу копировать более 2000 файлов в каталог static/images.

Я пытался:

documenten = "d:\genealogie\documenten"
os.mkdir(documenten)

, что дает WinError 183, поскольку каталог уже существует.

Я также пытался:

documenten = "d:\genealogie\documenten"
app = Flask(__name__, static_url_path='documenten')

, которыйдает ValueError: URL должны начинаться с косой черты.

Я видел довольно много подобных вопросов здесь, но, к сожалению, я не смог понять, как я могу использовать ответы для своей конкретной проблемы.Могу ли я настроить веб-сайт таким образом, чтобы я, как пользователь, мог запросить, скажем, <img src="documenten/2012035.jpg" height="150px">, возможно, с тем или иным префиксом localhost?Любая помощь очень ценится.

РЕДАКТИРОВАТЬ

Я хочу предоставить серверу доступ к каталогам, которые находятся за пределами каталога сервера.Может быть, я могу проиллюстрировать это, показывая, как легко это можно сделать в WAMP.Там нам нужно всего лишь добавить несколько строк в файл httpd.conf.Например:

Include "C:/wamp64/alias/*"

Alias /adressen "d:/adressen" 
<Directory "d:/adressen">
    Options Indexes FollowSymLinks Multiviews
    AllowOverride all
    Require all granted
</Directory>

Alias /genealogie "d:/genealogie" 
<Directory "d:/genealogie">
    Options Indexes FollowSymLinks Multiviews
    AllowOverride all
    Require all granted
</Directory>

Сервер и все его файлы находятся в c:/wamp64 и его подкаталогах.Но когда мы включаем <img src="http://localhost/genealogie/documenten/doc1064.jpg"> и <img src="http://localhost/adressen/doc5127.jpg"> в документ html, оба изображения хорошо отображаются, несмотря на то, что физически они находятся далеко за пределами WAMP, даже на разных дисках.Поэтому мой вопрос: можем ли мы сделать это и с FLASK?

1 Ответ

0 голосов
/ 29 декабря 2018

Итак, вам нужно открыть папку с вашим кодом Python, извлечь нужную картинку и отправить ее своему пользователю?

Вы можете сделать это с помощью

file = "d:\genealogie\documenten\your_file_name" #you may consider a path library so you can do this in windows or Linux 
os.open(file) #you should really use a image library here. open is just a placeholder

Другими словами, выхотите открыть изображение в своем коде (функция, класс, что угодно), а затем сделать с изображением все, что вам нужно сделать.Например, возвращая его пользователю.

Лично я бы попытался использовать что-то вроде этого:

from flask import send_file 
file = "d:\genealogie\documenten\your_file_name" #you may consider a path library so you can do this in windows or Linux 
return send_file(file, mimetype='image/jpg') #in case of jpg image, you may opt to not use the mimetype

Вы не можете сделать это с

documenten = "d:\genealogie\documenten" 
app = Flask(__name__, static_url_path='documenten')

НоЗачем?В основном static_url_path - это URL, который пользователь вводит в браузер.Это не имеет ничего общего с вашей структурой папок на сервере.Черт возьми, вам даже не нужно иметь папки на вашем сервере.

Структура ваших интернет-подарков не должна быть связана со структурой вашей файловой системы.По сути, это два совершенно разных мира, которые сталкиваются здесь.

URL-адрес используется для иерархической структуры сети и в основном справляется с организационными структурами (доменами, поддоменами).С другой стороны, файловый сервер может быть структурирован очень многими способами.Обычно вы хотите указать природу файлов и / или возраст файлов.

Кстати, команда mkdir создает папки, но у вас уже есть некоторые.

...