#48. Загрузка (upload) файлов на сервер. Классы FileField и ImageField | Уроки по Django 4

แชร์
ฝัง
  • เผยแพร่เมื่อ 17 ต.ค. 2024
  • Практический курс по Django: stepik.org/a/1...
    Телеграм-канал Django: t.me/django_se...
    Инфо-сайт: proproprogs.ru...
    Создаем форму загрузки файлов на сервер. Классы полей формы FileField и ImageField фреймворка Django.
    48_sitewomen.zip: github.com/sel...
    Загрузка файлов: docs.djangopro...

ความคิดเห็น • 24

  • @evgenyzakiev693
    @evgenyzakiev693 11 หลายเดือนก่อน +2

    Спасибо, Сергей! Здоровья тебе🤝

  • @igorkulibaba7287
    @igorkulibaba7287 11 หลายเดือนก่อน +1

    Это просто бесценно, спасибо что делитель с нами
    Конечно есть много вопросов, по ньансам.

  • @HeyArtem
    @HeyArtem 5 หลายเดือนก่อน +1

    Спасибо, все пашет! 🚜

  • @andredru4278
    @andredru4278 11 หลายเดือนก่อน +1

    Спасибо. Интересно.

  • @devidbrown8176
    @devidbrown8176 9 หลายเดือนก่อน +2

    Услышав про домашнее задание, принялся фантазировать. Вот, что получилось:
    ....
    import time
    .....
    def handle_uploaded_file(f):
    with open(f'uploads/{time.strftime("%d_%m_%Y_at_%Hч%Mм%Sс")}_{f.name}',
    'wb+') as destination:
    for chunk in f.chunks():
    destination.write(chunk)
    Я использую тут модуль time у которого есть strftime, принимающий строку, задающую формат отображения текущего времени и даты. В моем случае, при каждом сохранении, в название файла, перед f.name добавляется:
    день_месяц_год_at_час_минут_секунд
    Т.е., если сохранять не чаще, чем раз в секунду, то каждый новый файл будет с уникальным названием и не будет повторяться и перезатираться.

  • @sergeysergey421
    @sergeysergey421 11 หลายเดือนก่อน +2

    Нужно опцию добавить in memory через модуль io для хранения временных файлов в сессии пользователя. Если например у нас будет инженерная программа для расчетов, и нужно будет загрузить исходные данные

  • @_mrmark
    @_mrmark 11 หลายเดือนก่อน +1

    Спасибо!

  • @jadrezz.g
    @jadrezz.g 5 หลายเดือนก่อน +1

    Хорошим вариантом уникального имени для большого потока файлов будет
    import time
    name = round(time.time() * 1000)

  • @naklikal
    @naklikal 4 หลายเดือนก่อน

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

  • @ОлчаМонгуш-е8я
    @ОлчаМонгуш-е8я 11 หลายเดือนก่อน +1

    не получается открыть Evaluate Expression. В консоли POST запрос виден, все нормально, код 200, а в Debugger ничего не видно в режиме отладки. Что у меня не так?

    • @_a_lebed
      @_a_lebed 10 หลายเดือนก่อน

      Тоже так было. Переделал все заново - заработало. Так и не понял, где была ошибка

    • @ЗНАКОМЫЙСВАРЩИК
      @ЗНАКОМЫЙСВАРЩИК 9 หลายเดือนก่อน

      Тоже самое не вижу ничего. Что по итогу нужно сделать?

    • @HeyArtem
      @HeyArtem 5 หลายเดือนก่อน

      И у меня так было, просто все презапустил, со страницы ушел, вернулся и все ОК!

  • @ibrahimoglu
    @ibrahimoglu 11 หลายเดือนก่อน +1

    👍

  • @whoami866
    @whoami866 11 หลายเดือนก่อน

    Сергей добрый вечер, скажите пожалуйста я человек который посмотрел все видео по django3. Какие видео мне нужно и стоит посмотреть по django4?

    • @selfedu_rus
      @selfedu_rus  11 หลายเดือนก่อน

      Я бы рекомендовал посмотреть весь курс + курс на Stepik.

    • @whoami866
      @whoami866 11 หลายเดือนก่อน

      @@selfedu_rus вы уверены что это не будет пустая трата времени?

    • @selfedu_rus
      @selfedu_rus  11 หลายเดือนก่อน

      @@whoami866 нет, там много нового, а старое можно промотать

  • @ericcartman8047
    @ericcartman8047 11 หลายเดือนก่อน

    Планируется ли курс по Kivy?

    • @selfedu_rus
      @selfedu_rus  11 หลายเดือนก่อน

      пока нет

  • @Liz-ll3hb
    @Liz-ll3hb 11 หลายเดือนก่อน +1

    А что нужно чтобы посмотреть оставшиеся 24 недоступных видео?

    • @selfedu_rus
      @selfedu_rus  11 หลายเดือนก่อน +1

      Открываются через день. Либо приобрести курс по Django (ссылка под видео) + плюс некоторые дополнительные видео.

  • @HeyArtem
    @HeyArtem 5 หลายเดือนก่อน +2

    Я реализовал уникальность имени файла через uuid (4 тип, он типа не использует ваш мак адрес и секретней 😃).
    В начале имени файла присвоил пять сиволов и дефис.
    Выглядеть будет примерно так 53c58-ИмяФайла.jpg.
    Мне не нравится так, хотел бы ИмяФайла-53c58.jpg, но, если я меняю, то у меня получается ИмяФайла.jpg-53c58.
    def random_5_characters_for_filename() -> str:
    '''
    Генерирую рандомную последовательность из пяти символов.
    Использую UUID (универсальный уникальный идентификатор).
    Объект UUID-в строку-в список-срез-джойню в строку-удаляю запятые
    '''
    return ','.join(list(str(uuid.uuid4()))[-5:]).replace(',', '')
    def handle_uploaded_file(f):
    '''
    Фун-я для загрузки файла.
    К имени фото, в начале прикреплю пять рандомных символов
    '''
    with open(f"uploads/{random_5_characters_for_filename()}-{f.name}", "wb+") as destination:
    for chunk in f.chunks():
    destination.write(chunk)
    def about(request):
    '''О сайте'''
    if request.method == 'POST':
    form = UploadFileForm(request.POST, request.FILES)
    if form.is_valid():
    # 'file' - птмчт в UploadFileForm так назвал
    handle_uploaded_file(form.cleaned_data['file'])
    else:
    form = UploadFileForm()
    return render(
    request,
    'women/about.html',
    {'title': 'О сайте', 'menu': menu, 'form': form}
    )

    • @mjolnik
      @mjolnik 5 หลายเดือนก่อน +1

      >Мне не нравится так, хотел бы ИмяФайла-53c58.jpg, но, если я меняю, то у меня получается ИмяФайла.jpg-53c58.
      Можно сплитануть имя файла на непосредственно имя и расширение:
      file_n, file_e = f.name.split('.')
      f'uploads/{file_n}_{str(uuid4())[:5]}.{file_e}'