0: Html шаблоны вот такие простенькие, это конечно хорошо, но давайте их немножко разнообразим контентом, мы поймём как работать с картинками, а также как можно загружать файлы в фастапи, что довольно важно, потому что часто фастапи созда.
1: Даётся под какие-то обработку файлов например присылает аналитик файл и какая-то machine learning модель с этим файликом работает и отдаёт результат типа вот у вас такой вывод, вот такие аб тесты были проведены или ещё что-то
2: Подобное. Для этого нам нужно уметь принимать файлы. Сперва давайте посмотрим на картинки, как с ними можно поработать. И давайте зайдём на сайт островок точка ру и посмотрим, как обычно это делается. Островок точка ру до
3: Найдём какой-нибудь отель, неважно, нам нужна картинка, и мы заходим на картинку открыть картинку в новой вкладке. Обычно картинки хранятся на каких-то сторонних ресурсах. Да, это вообще какой-то левый сайт, который очень быстро отдаёт стати.
4: Content, да, картинки статический, потому что он не меняется со временем. Просто картинка, она как год назад, так и сейчас 1 и та же. Причём эти картинки обычно доступны без авторизации. То есть любой пользователь, если он знает какой-то вот хэш какой-то адрес этой картинки, он может по ней
5: Зайти и наши картинки используют обычные айди 1, 2, 3, 4, 5. И их довольно легко перебирать. Да, если кто-то захочет все перебрать картинки, то он сможет все-таки в практике чаще какие-то рандомные абсолютно ключи используются для названия-ка.
6: Картинок в нашем случае нам хочется тоже сделать доступ к картинкам, чтобы неавторизованный пользователь мог их смотреть и также, чтобы в фастапи мог с ними работать, как это делается, это делается через static files, через класс статик.
7: Files, который нужно подключить в файле мейн пай. К нашему приложению. Мы из фастапи, фастапи, статик, импортируем статик файлс, и затем мы хотим примонтировать к нашему приложению через
8: Mount.
9: Контент картинки в нашем приложении, причём нас просят путь указать. И у нас здесь будет отдельная папка статик, где будет статический контент. Мы так и пишем статик. Дальше нам нужно
10: Передать приложение прям отдельное азги приложение, например, вот как у нас в фастапи это приложение старлетт, это тоже переменная, которая является приложением, также static files является отдельным приложением, здесь обязательно нужно указат.
11: Директорию. У нас это апп слэш статик и очень важно для джинджи указать название. Мы также сделаем его статик здесь, конечно, несколько раз повторяется, вроде как 1 и тоже, но мы пока закроем на это глаза. Итак,
12: Что такое монтирование? Это похоже на include роутер, на добавление роутеров, но мы добавляем не какой-то роутер внутри нашего приложения, а прям отдельное приложение. У этого приложения могут быть свой набор эндпоинтов.
13: И они примонтируют, я по какому-то адресу, вот по этому адресу они примонтируют. Я к нашему приложению, и у нас тогда по адресу там локал хост 8000 слэш статик будет весь статический контент, который будет браться из вот этой
14: Директории и называться статик. Мы посмотрим, как к нему обращаться. Окей, мы примонтировали его. Теперь нам бы хорошо было бы какие-то картинки сюда добавить. Давайте не вручную их сюда добавим, а сделаем целый эндпоинт, который позволит нам загружать файлы и работать
15: С ними для этого мы сделаем дополнительную папку, назовём её имаджес, и это будет у нас отдельный роутер, который будет принимать файлы, можно принимать любые файлы, можно принимать текстовые файлы csv эксель файлы, с ними работать.
16: Мы посмотрим, как можно работать с картинками обычными и сохранять их к себе первонаперво из фастапи. Нам нужно импортировать аплоуд файл, который позволяет очень удобно работать с данными, с файлами. Мы здесь напишем роутер, конечно же.
17: Api роутер.
18: Уже знакомая нам процедура префикс. Мы дадим, например, images и сделаем тэгс.
19: Загрузка картинок что здесь будет, здесь будет 1 endpoint, причём он обязательно должен быть пост, так как мы добавляем какой-то файл и пока здесь оставим, например давайте хотелс сделаем, мы будем загружать картинки отелей, и у нас
20: У нас будет асинхронная функция add, хотел имидж добавлять картинки отелей, что здесь нужно, мы принимаем только файл, мы его так и назовём файл и обязательно указать его тип аплоуд, файл, чтобы остапе понял, что это не просто какой-то парамет.
21: А это действительно файл, и дальше с ним можно работать. Он когда принимается, находится в оперативной памяти. Если это маленькие файлы, они находятся целиком и полностью в оперативной памяти с большими файлами, там немножко сложнее, они как-то часть хранится.
22: На жёстком диске час хранится в оперативной памяти. Тем не менее, важно понимать, что когда мы работаем с большим количеством файлов, или у нас очень много клиентов, которые пользуются нашим приложением. Очень важно помнить, что память может забиться, что она не бесконечна. В данном случае у нас пример
23: Будет простенький, мы всего 1 пользователь у нашего приложения всего 1 картиночку грузим, и поэтому у нас проблем с этим не будет, так как картинка находится в оперативной памяти и она никуда на жёсткий диск не сохраняется. Нам нужно её сохранить в нашу папку. Это делается с помощью библиотеки 100
24: В python она называется shot ил не знаю, как правильно итак, нам достаточно открыть этот файл с помощью библиотеки шат ил с помощью контекстного менеджера мы открываем его здесь, прописываем обязательно распо.
25: Положение у нас это будет апп, слэш, статик, слэш, имаджес и давайте здесь, конечно, создадим папку images для картинок, обычно в статическом контенте могут быть ещё css, файлы для стилей, там, javascript, script.
26: Ну у нас это будут просто картинки и здесь мы также укажем название файла и его расширение web p. Это специальное расширение, которое позволяет сжимать картинки без потери качества и также давайте.
27: Помимо файла примем например название файла нейм и у нас это будет да, давайте даже int сделаем помните у нас есть параметр аттрибут image id у отелей и у комнат и мы обращаемся именно по нему к картинкам соответственно да.
28: Если пользователь загружает любой файл, он может дать ему какое-то название с айдишником, и мы будем его сюда встраивать, то есть будет, например, 1 точка веб пи, 2, точка web, p. S. File, object и далее с помощью библиотеки шат, ютил и его.
29: Тогда copy file object мы можем вот этот файл, который мы загружаем?
30: Точка файл да, у него есть параметр file name, либо сам файл бинарный, который мы хотим загрузить вот на это место мы копируем и давайте посмотрим, что у нас будет. На самом деле. У нас должна добавиться картинка в
31: Папку static в папку images у меня уже есть набор картинок, чтобы мы могли загрузить фото отелей, вам будет задание найти свою картинку, которая вам нравится под отель и посмотреть как оно будет.
32: Отображаться. Конечно, мы забыли добавить роутер, давайте это быстренько сделаем. Мы это дело скопируем. У нас есть images.
33: У нас есть роутер имиджес.
34: Мы его добавляем через include роутер. Здесь у нас он должен появиться загрузка картинок и давайте увидим, что здесь есть, во первых, параметр. Например, 1 отель я хочу загрузить, то есть у него будет название 1 точка веб пи и мы можем выбрать
35: File. Давайте это сделаем. Итак, я загружаю картинку, она у меня уже называется 1, но тем не менее, её название будет новое. Делаю экзекьют, нам ничего не отдаётся, потому что мы ничего не отдавали. Возможно, здесь стоит отдать статус, например, двест.
36: 1 то, что мы добавили эту картинку и посмотрим самое интересное, добавилась ли она у нас. На самом деле смотрите в Папке static в Папке images у нас добавилась картинка 1 точка вб пи, вот такая красота, это у нас для 1 отеля и точно также мы продела.
37: Эту операцию.