Услышав про домашнее задание, принялся фантазировать. Вот, что получилось: .... 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_час_минут_секунд Т.е., если сохранять не чаще, чем раз в секунду, то каждый новый файл будет с уникальным названием и не будет повторяться и перезатираться.
Нужно опцию добавить in memory через модуль io для хранения временных файлов в сессии пользователя. Если например у нас будет инженерная программа для расчетов, и нужно будет загрузить исходные данные
Захотел изменить имя файла через datetime, что вполне логично. Но забыл проверить пунктуацию выводящейся из datetime инфы. Долго не мог понять что же я не так делаю. А все точка и двоеточия =)
не получается открыть Evaluate Expression. В консоли POST запрос виден, все нормально, код 200, а в Debugger ничего не видно в режиме отладки. Что у меня не так?
Я реализовал уникальность имени файла через 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} )
>Мне не нравится так, хотел бы ИмяФайла-53c58.jpg, но, если я меняю, то у меня получается ИмяФайла.jpg-53c58. Можно сплитануть имя файла на непосредственно имя и расширение: file_n, file_e = f.name.split('.') f'uploads/{file_n}_{str(uuid4())[:5]}.{file_e}'
Спасибо, Сергей! Здоровья тебе🤝
Это просто бесценно, спасибо что делитель с нами
Конечно есть много вопросов, по ньансам.
Услышав про домашнее задание, принялся фантазировать. Вот, что получилось:
....
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_час_минут_секунд
Т.е., если сохранять не чаще, чем раз в секунду, то каждый новый файл будет с уникальным названием и не будет повторяться и перезатираться.
Спасибо, все пашет! 🚜
Нужно опцию добавить in memory через модуль io для хранения временных файлов в сессии пользователя. Если например у нас будет инженерная программа для расчетов, и нужно будет загрузить исходные данные
Спасибо. Интересно.
Хорошим вариантом уникального имени для большого потока файлов будет
import time
name = round(time.time() * 1000)
Спасибо!
Захотел изменить имя файла через datetime, что вполне логично.
Но забыл проверить пунктуацию выводящейся из datetime инфы. Долго не мог понять что же я не так делаю. А все точка и двоеточия =)
👍
не получается открыть Evaluate Expression. В консоли POST запрос виден, все нормально, код 200, а в Debugger ничего не видно в режиме отладки. Что у меня не так?
Тоже так было. Переделал все заново - заработало. Так и не понял, где была ошибка
Тоже самое не вижу ничего. Что по итогу нужно сделать?
И у меня так было, просто все презапустил, со страницы ушел, вернулся и все ОК!
Планируется ли курс по Kivy?
пока нет
Сергей добрый вечер, скажите пожалуйста я человек который посмотрел все видео по django3. Какие видео мне нужно и стоит посмотреть по django4?
Я бы рекомендовал посмотреть весь курс + курс на Stepik.
@@selfedu_rus вы уверены что это не будет пустая трата времени?
@@whoami866 нет, там много нового, а старое можно промотать
А что нужно чтобы посмотреть оставшиеся 24 недоступных видео?
Открываются через день. Либо приобрести курс по Django (ссылка под видео) + плюс некоторые дополнительные видео.
Я реализовал уникальность имени файла через 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}
)
>Мне не нравится так, хотел бы ИмяФайла-53c58.jpg, но, если я меняю, то у меня получается ИмяФайла.jpg-53c58.
Можно сплитануть имя файла на непосредственно имя и расширение:
file_n, file_e = f.name.split('.')
f'uploads/{file_n}_{str(uuid4())[:5]}.{file_e}'