Сообщения

Показаны сообщения с ярлыком "python"

Errors when installing aiortc from git on Windows

Изображение
When I was trying to install aiortc on windows I got stuck with multiple errors. When you just do pip install . you will not get a working version: c1083: cannot open include file: 'opus/opus.h': no such file or directory 'vcpkg' is not recognized as an internal or external command To fix those errors you need to install the native libraries by the script provided by  aiortc-codecs . Also you will need build tools etc. If you have no build tools installed you can install them . Run the visual studio installer and opt those packages: You also need to install  vcpkg . Download from git: git clone https://github.com/Microsoft/vcpkg.git , run the install script: .\vcpkg\bootstrap-vcpkg.bat and add it to path by using "Edit environment variables" Double tab on Path and add vcpkg folder to the list, it should have vcpkg.exe file in it: Reboot your pc, or reopen the cmd so it has Path updated. Now we need to use the dependency installer script from  https://github

Python requests ошибка SSL соединения

Изображение
У некоторых сайтов с неправильно настроенным SSL сервером могут возникать проблемы соединеня. В моем случае было странно то что я мог посетить веб сайт через браузер и никаких ошибок не вознкало, но когда я пытался отправить запрос через командную строку curl или скриптом питона то возникала ошибка SSL соединения. Я изучил в чем была проблема, оказалось что в браузерах есть встроенная система востановления недостающих SSL сертификатов. В моем случае была проблема в том что сервер не отдавал промежуточный сертификат. Браузер искал его по своей внутренней базе данных и смог восстановить его. Но у небраузеров такой функции небыло. Вы можете проверить тожесамое посетив сайт https://incomplete-chain.badssl.com . Если вы попробуете послать на него запрос через curl то получите ошибку. Чтобы исправить эту ошибку посылайте запрос с verify=False .

Django генерирование рандомных имён загруженным файлам FileField

В одном из моих проектов мне потребовалось реализовать загрузку пользовательских файлов через форму. Я использовал обычный FileField как советуют во всех туториалах, с стандартной конфигурацией. Пользователи загружали файлы, и все работало хорошо. Но затем я заметил проблему - делов в том что имя файла на сервере совпадало с именем файла которое загрузил пользователь. То есть, например если пользователь загружает картинку 1.png, то его картинка будет доступна по ссылке /uploads/1.png. Проблема этого подхода в том что в таких случаях имя файла можно будет просто перебрать и находить чужие файлы. Например, собрать огромный список стандартных названий файлов, и перебирать их в целях найти чужие файлы. Чтобы исправить эту проблему нужно просто использовать случайные имена файлов. Но дело в том что по умолчанию FileField нигде не сохраняет оригинальное имя файла. Оригинальное имя файла придётся сохранять отдельным полем в моделях. @csrf_exempt @login_required def upload_file (request, s

Как получить информацию о youtube видео через питон по ссылке на видео

Не многие знают, но пакет youtube-dl можно использовать не только как утилиту в пользовательских целях, но и интегрировать в питон код. Тк youtube-dl это python модуль, то это очень просто. Нужно установить pypi пакет: pip install youtube-dl Данные в своем коде можно получать так: from youtube_dl import YoutubeDL video = "http://www.youtube.com/watch?v=BaW_jenozKc" with YoutubeDL({ 'quiet' : True }) as ydl: info_dict = ydl.extract_info(video, download = False ) video_url = info_dict.get( "url" , None ) video_id = info_dict.get( "id" , None ) video_title = info_dict.get( 'title' , None ) Нужно понимать что могут происходить ошибки из-за сети итд, поэтому стоит обрабатывать ошибки сети итд: from youtube_dl import YoutubeDL from youtube_dl.utils import YoutubeDLError try : video = "http://www.youtube.com/watch?v=BaW_jenozKc" with YoutubeDL({ 'quiet' : True }) as ydl: info_dict

walrus оператор в питоне

В питоне 3.8 существует walrus operator, который позволяет присваивать переменные доступные в теле, внутри выражений. Walrus operator получил такое название из-за своего сходства с мордой моржа. Этот синтаксис позволяет избегать повторения самого себя, например: a = [ 1 , 2 , 3 , 4 ] if (n := len (a)) > 10 : print ( f "List is too long ( { n } elements, expected <= 10)" ) Если не новый синтаксис, то вы бы не смогли назначить переменную внутри выражения. Вам пришлось бы создать переменную выше, что усложнит чтение кода: a = [ 1 , 2 , 3 , 4 ] n = len (a) if (n > 10 ): print ( f "List is too long ( { n } elements, expected <= 10)" ) Так-же Walrus operator помогает в регулярных выражениях: discount = 0.0 if (mo := re.search( r ' ( \d + ) % discount' , advertisement)): discount = float (mo.group( 1 )) / 100.0 Вам нужно было получить доступ к переменной в теле if, поэтому этот оператор очень полезен. Так же этот оператор полезен при чт

В Python все данные - объекты

Краткий ответ: Объекты Все данные в Python - это объекты. Каждый объект имеет свой  идентификатор, тип, и значение . Для получения идентификатора объекта есть функция  id("привет")  # Выводит адрес в котором хранится объект Для получения типа объекта: type("привет")  # Выводит тип, в этом случае str Объекты делятся на два типа:  Изменяемые и неизменяемые . Значение изменяемых объектов может изменится. Неизменяемые объекты не могут изменить свое значение после создания. Способность объекта к изменяемости зависит от его типа. Например  цифры, строки, кортежи  - неизменяемые .  А списки, словари, множества - изменяемые .  Поскольку списки изменяемые, каждый новый инстанс списка имеет свое уникальное значение: a = [1] id(a) # 140435239681096 b = a id(b) # 140435239681096 print(a) # [1] Если вы попробуете присвоить новый список для  b , то переменная  b  будет ссылатся на новый список, но переменная  a  останется неизменной. В объектах так же есть счетчик ссылок, когда н

Python как создать двухфакторную авторизацию

В этом туториале вы научитесь использовать Pyotp для генерации 2FA кодов. 3 года назад я написал мини туториал про то как использовать pyotp для создания кодов. Но туториал получился не полным тк я не показал как все работает. Обычно пользователи используют приложения авторизации вроде Authenticator для двух факторной авторизации. Такие приложения обычно поддерживают два протокола otp: TOTP, и HOTP. Подробнее как они работают мы разбирать не будем, просто нужно понимать что TOTP генерирует какую-то последовательность цифр на основе случайно сгенерированного ключа, и unixtime времени. Новый ключ появляется каждые 30 секунд. Простые действия над PyOTP Чтобы установить PyOTP нужно: pip install pyotp Чтобы использовать нам нужно, импортировать pyotp, и придумать секретный ключ, например "pythonforbeginers". Этот ключ потом пользователь будет вводить в Authenticator: import pyotp totp = pyotp.TOTP('base32secret3232') totp.now() Функция

Как загружать объекты на AWS S3 прямо из браузера без посредников.

Изображение
В этом туториале мы будем использовать Minio, но вместо минио вы можете использовать любой сервер поддерживающий S3 протокол. Обычно для загрузки пользовательских объектов используют AWS lambda в которую через POST запрос пользователи отправляют файлы, и на лямбде происходит авторизация запроса, и лямбда уже сама загружает пользовательский файл на AWS S3. Но такой подход очень неэфективный вить мы тратим много трафика для получения файла на лямбду, и иеще и на загрузку в S3.  Чтобы исправить эту проблему придумали presigned urls. Presigned urls это "подписанные ссылки", которые подписывает бекенд и отдаёт браузеру который может POST запросом загрузить файл который будет доступен в S3 хранилище. Сделано это было чтобы каждый человек из интернета не мог просто загрузить любой файл, а лишь только с разрешения вашего бекенда. Presigned urls очень схожи с JWT, они тоже подписываются через криптографические функции. Но чтобы работать с Presigned urls вам не обязательно полностью по