Flask #17: Загрузка файлов на сервер и сохранение в БД

  Рет қаралды 26,137

selfedu

selfedu

4 жыл бұрын

Инфо-сайт: proproprogs.ru
Принцип загрузки файлов на сервер через форму на примере загрузки изображений аватара пользователя и сохранение их в БД.
Проект flasksite: github.com/selfedu-rus/flasks...

Пікірлер: 48
@ms-33
@ms-33 4 жыл бұрын
Спасибо! Ваши уроки великолепны!
@rustamakhmullaev5697
@rustamakhmullaev5697 4 жыл бұрын
Спасибо за интересный урок!!! отдельное большое спасибо за исходники!!!
@donfedor007
@donfedor007 3 жыл бұрын
Полезная тема!!! Спасибо Вам!!!
@just_nekr
@just_nekr Жыл бұрын
Смотрю ваши великолепные уроки и задаюсь вопросом, а за что я вообще деньги в гикбрейнс отдал год назад
@userqh67vey6
@userqh67vey6 Жыл бұрын
У фласка есть уязвимость при загрузке файлов. На Hack The Box есть задача с уязвимым компьютером "OpenSource", там как раз сайт на Flask и можно потренироваться. Также есть уязвимость с подбором pin-а для удаленного дебагера. Собственно с Hack The Box я попал сюда на эти уроки. Лайк за видео!
@orthodox-chanel
@orthodox-chanel Жыл бұрын
а есть способы защититься от этой уязвимости?
@user-qn8zd2tq9v
@user-qn8zd2tq9v Жыл бұрын
@@orthodox-chanel Не ясно, что именно имел в виду комментатор, но возможно, уязвимость связана с сохранением файлов, которые загружает пользователь, в файловую систему. Чтобы от нее защититься, нужно использовать функцию werkzeug.utils.secure_filename(filename: str) -> str, которая возвращает безопасное имя файла. Автор ролика про эту функцию не сказал, но и в уроке файл сохраняется в базу данных, поэтому ее не нужно было использовать.
@user-hn7gb9ej9d
@user-hn7gb9ej9d 4 жыл бұрын
Спасибо!
@user-tj4we7hk9d
@user-tj4we7hk9d 4 жыл бұрын
Крутооооооо
@nadyamoscow2461
@nadyamoscow2461 3 жыл бұрын
Большое спасибо. ps Аватарки у вас симпатичные
@yarik83men51
@yarik83men51 3 жыл бұрын
Спасибо
@delay_gryaz_chisto
@delay_gryaz_chisto 4 жыл бұрын
а не проще ли сделать поле аватаркой в бд путем к картинке, картинки грузить в файловую систему, и при создании пользователя применять дефолтный линк ‘/images/default.png’? а когда пользователь загрузит новый аватар, положить его в папку ‘images/users/1.png’, и в базе прописать путь к нему? а в шаблон отдавать путь к картинке. во-первых база будет меньше напрягаться(передать бинарник != передать строку), во-вторых, тем самым, если у нас будет 500 пользователей, будет всего 1 картинка, к которой они все будут ссылаться. в какой-то мере DRY плюс, насколько я знаю, хранить бинарные файлы в базе данных - плохая практика. это лишь мое предложение. спасибо вам за ваши труды. очень доступно объясняете.
@selfedu_rus
@selfedu_rus 4 жыл бұрын
Спасибо, хороший вопрос. Лично я так и делаю в сайтах - через путь к файлу. Но если это всего лишь небольшая по объему аватарка, которая уникальна для каждого пользователя, то можно и в БД засунуть. И плюс, я хотел показать как вообще картинки можно сохранять и читать из БД на конкретном примере.
@artemkhmil
@artemkhmil 3 жыл бұрын
Отличный комментарий. У меня вопрос: если реализовать все Вами выше указанное, то как удалять фотографии старых аватаров в папке /image/users?
@delay_gryaz_chisto
@delay_gryaz_chisto 3 жыл бұрын
@@artemkhmil можно написать скрипт, который будет запускаться раз в месяц, и проходиться по всем файлам в папке, и, если файла нет в бд, - удалять его. вообще не проблема. куда лучшее решение, чем хранить миллион одинаковых бинарников в бд)
@7volaner7
@7volaner7 2 жыл бұрын
@@selfedu_rus Вот зря! Не надо учить людей изобретать велосипеды!
@user-lk4jx9sn9t
@user-lk4jx9sn9t 2 жыл бұрын
Вот так вот ребята это делается в самом простом варианте)))
@Morfeus681
@Morfeus681 Жыл бұрын
Спасибо огромное за уроки!! У меня вопросик, подскажите... если работать с js и ajax, т.е. чтобы не перегружать страницу, как это можно сделать и как быть с передачей результата SQL запроса в шаблон?
@vladislavkachaev6507
@vladislavkachaev6507 3 жыл бұрын
Спасибо вам за огромный вклад. Помните пожалуйста можно ли данный пример (сайт блог) залить на хостинг и использовать бд скюлайт и flask? Или это невозможно? Где это можно тогда применить и как реализовать сайт на питоне с бд?
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Как пример, хостинг foxit.com позволяет использовать Flask в качестве бэкэенда. Достаточно написать в службу поддержки, вам все конкретно разьяснят.
@orthodox-chanel
@orthodox-chanel Жыл бұрын
если работаете с постгрес и фото не хочет отображаться то нужно его преобразовать в байтовый вид таким образом img = self.__user['avatar'].tobytes(), я на этом моменте долго топтался
@user-yg6sp8pb4q
@user-yg6sp8pb4q 5 ай бұрын
Спасибо тебе, добрый человек!
@network_sw
@network_sw Жыл бұрын
Еще бы урок по скачиванию файлов из веб-приложения на Flask...
@user-ji6df1ei2c
@user-ji6df1ei2c 2 жыл бұрын
Скажите пожалуйста почему в f-строках сразу нельзя писать обращение к базам данных вставляя переменные в {} кавычки. В прошлых видео встречал в комментах упоминания про SQL инъекции. Видимо это связано с безопасностью. Можете в кратце пояснить или дать наводку, где можно почитать про это) Потому что пока "не бум бум", а узнать хотелось бы. Спасибо =)
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Да, сразу не рекомендуется, т.к. в GET-запросе тогда можно будет прописать обращение к БД и сделать нехорошие вещи. Поэтому, нужно в SQLite использовать символы ? - они предотвращают этот момент.
@aliaksandrzabalotnikau1948
@aliaksandrzabalotnikau1948 3 жыл бұрын
Привет, учусь по твоим курсам но использую mysql и в коннекторе к python не могу найти такую функцию Binary как у тебя в sqlite. Может есть возможность прочитать загруженный файл сразу в бинарный код используя какой-то другой способ?
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Бинарный файл иначе загружать получится только извратом, лучше разобраться, почему нет такой функции. Она стандартная пакета sqlite3. Вначале должен идти импорт (import sqlite3), а затем, обращение к этой функции. Посмотрите, есть ли этот импорт в файле и второе, попробуйте поставить последнюю версию sqlite3.
@aliaksandrzabalotnikau1948
@aliaksandrzabalotnikau1948 3 жыл бұрын
Я использую mysql вместо sqlite3) В общем сделал немного по другому. У файла, который получаем из объекта запроса есть метод save, который позволяет сохранить этот файл на компе(сервере). В общем благодаря этому методу сохраняю загруженный файл, а потом читаю его в бинарном режиме и отправлю в БД(mysql) уже в бинарном виде. Правда не знаю насколько это хорошая практика, ведь теперь файл сохранён и там и там и по идеи используется больше места. Думаю прикрутить автоматическое удаление с компа после добавления в БД с использованием потока) Получится такой маленький буфер)) P.s Мне кажется я написал это для себя, что бы лучше въехать в то, что я нагородил у себя в коде. И спасибо за уроки!!
@Jiligriv
@Jiligriv 2 жыл бұрын
Очень странные баги у себя отлавливаю - не грузится свой аватар. Дважды пересмотрел ролик перепроверил каждую строчку написанного кода. Взял ваш profile.html и вставил вместо своего, всё заработало. Из отличий только то, что в {{url_for('upload')}} и {{url_for('logout')}} между двойными фигурными скобками у меня были пробелы (вот так {{ url_for('logout') }}). Из-за этого действительно могло не работать?
@Andredy89
@Andredy89 3 жыл бұрын
все здорово. Но как это потом в инет то все загрузить?
@TSM_149
@TSM_149 Жыл бұрын
Спасибо за ролик! Вот только не понял зачем отдельно делать "открыть файл", а потом "загрузить". Не лучше ли сделать "изменить аватар", и всё выполнить одной операцией - открыть файл и загрузить? P.S. Ещё нарвался на проверку, что имя пользователя должно быть больше 4 (четырёх) символов ... len(request.form['name']) > 4 and len(request.form['email']) > 4 ... 🤦‍♂. Ввожу имя "Иван", а регистрация не проходит 😁
@dmitriydolgopolov5212
@dmitriydolgopolov5212 Жыл бұрын
Так ведь "Иван" содержит 4 символа. А по условию проверки должно быть больше 4.
@Gree_ok
@Gree_ok 11 ай бұрын
Почему для загрузки фото профиля нужен обработчик? Почему нельзя просто загрузить фото из БД, как имя или почту?
@selfedu_rus
@selfedu_rus 11 ай бұрын
Насколько я помню, там нужно еще загружать графический файл на сервер, за это обработчик и отвечает.
@lastmorning9409
@lastmorning9409 Жыл бұрын
4-20 лайков. не буду портить, оставлю коммент просто
@ShDShD-sv6yx
@ShDShD-sv6yx 7 ай бұрын
Автор про константу 3 минуты рассказывал, а функции пролетел как будто переменные какие-то.
@arnowt
@arnowt 3 жыл бұрын
Зачем вы удаляете таблицу, вместо того чтобы модифицировать?
@AnnaIsHere
@AnnaIsHere 2 жыл бұрын
Мне тоже интересно как быть, когда сайт уже работает и понадобилось что-то добавить в базу. Не удалять же.
@just_nekr
@just_nekr Жыл бұрын
@@AnnaIsHere есть дополнительная библиотека Flask_Migrate как раз для подобных вещей
@ShDShD-sv6yx
@ShDShD-sv6yx 7 ай бұрын
Автор понимаю бесплатно и тп, но посмотри англоязычные курсы там авторы все-таки более последовательно далеют подачу материала. Здесь как-то нарубил куски и вот держи.
@Frassorini
@Frassorini 2 ай бұрын
Кто например? Подача немного трудная, согласен
@vladislavraskoshinskii9681
@vladislavraskoshinskii9681 3 жыл бұрын
не нашел класс profile-table в css
@selfedu_rus
@selfedu_rus 3 жыл бұрын
под видео есть ссылка на проект занятия
@nazarkhort4362
@nazarkhort4362 2 жыл бұрын
@@selfedu_rus profile-table нету даже там. видимо поэтому у меня не отображает аватар
@nazarkhort4362
@nazarkhort4362 2 жыл бұрын
@@selfedu_rus обидно, поскольку я прошел 17 уроков
@nazarkhort4362
@nazarkhort4362 2 жыл бұрын
@@selfedu_rus если запустить ваш исходник, то аватар не отображается
@serg888fert4
@serg888fert4 2 жыл бұрын
@@nazarkhort4362 Скорее всего в файле UserLogin.py в функции getAvatar() у Вас в конце нет оператора return img в css тоже не нашел класса profile-table. поэтому написал сам .profile-table img, .profile-table svg { width: 150px; height: 150px; top: 20%; left: 50%; margin: -12px 0 0 -12px; }
Загрузка файлов с фронтенда
18:49
Михаил Непомнящий
Рет қаралды 49 М.
БОЛЬШОЙ ПЕТУШОК #shorts
00:21
Паша Осадчий
Рет қаралды 7 МЛН
Wait for the last one! 👀
00:28
Josh Horton
Рет қаралды 124 МЛН
Uploading Files with Flask - Everything You Need to Know
25:07
Luke Peters
Рет қаралды 10 М.
Создание многопоточного сервера на Python и Orange Pi
11:54
Чёрный Треугольник
Рет қаралды 52 М.
Скачивание изображений, pdf и других файлов с фронта
11:45
How to Upload Files with Flask Using Python
11:04
Arpan Neupane
Рет қаралды 67 М.
Понять Django. Пишем "Hello world". Объясняю просто и с картинками.
25:49
Клуб дедов-программистов
Рет қаралды 178 М.
🔒 Flask Login: авторизация
29:30
letsCode
Рет қаралды 43 М.
БОЛЬШОЙ ПЕТУШОК #shorts
00:21
Паша Осадчий
Рет қаралды 7 МЛН