пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ IP - пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Когда мы только начинаем изучать Python, мы закладываем некоторые вредные привычки при написании кода, о которых мы можем даже не подозревать.
Вы можете написать код, который сработает сейчас, но может не сработать в будущем, или вы можете использовать какие-то хитрые ходы вместо встроенной функции, которая могла бы облегчить вашу жизнь.
У большинства из нас сохранились не одна из тех вредных привычек при программировании на Python, что формируются в период первых месяцев обучения. Отличная новость в том, что вы можете с легкостью искоренить их, прочитав приведенный ниже текст.
1. Использование import *
Каждый раз, когда нам становится лень, то возникает соблазн импортировать все необходимое из модуля с помощью from xyz import *.
Это не самый лучший подход по многим причинам. Кот несколько из них:
Это может оказаться неэффективно: если в модуле очень много объектов, то вам придется долго ждать, пока все импортируется.
Это может вызвать конфликт имен переменных: когда вы используете *, то вы понятия не имеете, какие объекты вы импортируете и как они называются.
Как же с этим бороться? Импортируйте либо какой-то конкретный объект, либо весь модуль целиком.
# Using import *
# Bad
from math import *
print(floor(2.4))
print(ceil(2.4))
print(pi)
# Good
import math
from math import pi
print(math.floor(2.4))
print(math.ceil(2.4))
print(pi)
2. Try/except: отсутствие указания исключения в блоке «except»
Я очень долго пренебрегал этим. Сложно посчитать, сколько раз Pycharm давал мне понять (этими противными подчеркиваниями), что не нужно использовать «голое» исключение. Это идет в разрез с рекомендациями PEP8.
# Try - except
# Bad
try:
driver.find_element(...)
except:
print("Which exception?")
# Good
try:
driver.find_element(...)
except NoSuchElementException:
print("It's giving NoSuchElementException")
except ElementClickInterceptedException:
print("It's giving ElementClickInterceptedException")
Проблема «голых» исключений заключается в том, что оно будет перехватывать исключения SystemExit и KeyboardInterrupt, что затрудняет прерывание программы с помощью Control-C.
В следующий раз, когда вы будете использовать try/except, укажите исключение в блоке except.
3. Не использовать Numpy для математических вычислений
Очень часто мы забываем, что в Python есть множество пакетов, которые могут значительно облегчить нашу жизнь и сделать ее более продуктивной.
Одним из таких пакетов является Numpy – пакет для математических вычислений. Numpy может помочь вам вычислять математические операции быстрее, чем циклы for.
Допустим, что у нас есть массив random_scores, и мы хотим получить средний балл тех, кто не сдал экзамен (score>>dict_countries.keys()
dict_keys(['USA', 'UK', 'Canada'])>>>dict_countries.values()
dict_values([329.5, 67.2, 38])
Проблема тут заключается в том, что мы не всегда используем их должным образом.
Например, мы хотим просмотреть словарь и получить ключи. Вы можете использовать метод .keys, но знаете ли вы, что ключи можно получить, просто перебирая словарь? В этом случае использование метода .keys будет излишним.
# Not using .keys() properly
# Bad
for key in dict_countries.keys():
print(key)
# Good
for key in dict_countries:
print(key)
Кроме того, можно придумать некоторые хитрости для получения значений словаря, например, с помощью метода .items().
# Not using .items()
# Bad
for key in dict_countries:
print(dict_countries[key])
# Good
for key, value in dict_countries.items():
print(key)
print(value)
7. Никогда не использовать генераторы (или использовать их всегда)
Генератор предлагает более простой синтаксис при создании новой последовательности (списка, словаря и т.д.) на основе уже определенной последовательности.
Допустим, мы хотим перевести все элементы в нашем списке countries в нижний регистр.
И хотя вы могли бы это сделать просто с помощью цикла for, но также вы можете упростить работу при помощи генератора списка.
# Bad
countries = ['USA', 'UK', 'Canada']
lower_case = []
for country in countries:
lower_case.append(country.lower())
# Good (but don't overuse it!)
lower_case = [country.lower() for country in countries]
Генераторы – это очень полезно, но не злоупотребляйте ими! Помните правило Дзен Python: «Простое лучше, чем сложное».
8. Использование range(len())
Одни из первых функций, которые мы изучили будучи новичками – это range и len, поэтому не удивительно, почему многие люди имеют дурную привычку писать range(len()) при переборе списков.
Допустим у нас есть два списка: countries и populations. Если мы хотим пройтись по обоим спискам одновременно, то, вероятнее всего, вы воспользуетесь range(len()).
# Using range(len())
countries = ['USA', 'UK', 'Canada']
populations = [329.5, 67.2, 38]
# Bad
for i in range(len(countries)):
country = countries[i]
population = populations[i]
print(f'{country} has a population of {population} million people')
И хотя это в принципе выполняет свою работу, вы все равно можете упростить задачу, воспользовавшись enumerate (или, что еще лучше, воспользовавшись функцией zip для сопряжения элементов из обоих списков).
# OK
for i, country in enumerate(countries):
population = populations[i]
print(f'{country} has a population of {population} million people')
# Much Better
for country, population in zip(countries, populations):
print(f'{country} has a population of {population} million people')
9. Форматирование с помощью оператора +
Вероятно, одна из первых вещей, которую мы изучаем в Python, - это то, как соединять строки с помощью оператора +.
Это полезный, но не самый эффективный способ соединения строк в Python. Помимо этого, это не очень красиво – чем больше строк вам нужно соединить, тем больше операторов + вы будете использовать.
Вместо этого вы можете воспользоваться f-строкой.
# Formatting with + operator
# Bad
name = input("Introduce Name: ")
print("Good Morning, " + name + "!")
# Good
name = input("Introduce Name: ")
print(f'Good Morning, {name}')
Преимуществом f-строк в том, что они полезны не только для конкатенации, но и для других целей.
10. Использование изменяемых значений в качестве значений по умолчанию
Если вы включите изменяемое значение (например, список) в качестве параметра функции по умолчанию, то увидите нечто неожиданное.
# Bad
def my_function(i, my_list=[]):
my_list.append(i)
return my_list>>> my_function(1)
[1]
>>> my_function(2)
[1, 2]
>>> my_function(3)
[1, 2, 3]
В приведенном выше коде каждый раз, когда мы вызываем функцию my_function, список my_list сохраняет значения из предыдущих вызовов (а мы, скорее всего, хотим инициировать пустой список при каждом вызове функции).
Чтобы избежать такой проблемы, мы должны установить этот параметр my_list равным None и добавить условие if как показано ниже.
# Good
def my_function(i, my_list=None):
if my_list is None:
my_list = []
my_list.append(i)
return my_list>>> my_function(1)
[1]
>>> my_function(2)
[2]
>>> my_function(3)
[3]
Хотим рассказать о простом и быстром способе восстановить пароль администратора в графическом интерфейсе FreePBX 13. Для этого вам потребуется доступ к консоли сервера по протоколу SSH. Если вы так же не помните пароль на SSH доступ, то тогда вам необходимо подключиться к серверу путем консольного доступа (подключить монитор и клавиатуру), или открыть KVM окно в случае, если это виртуальная машина. Итак, если вы забыли пароль от FreePBX и спешите восстановить его – мы расскажем как это сделать.
Получаем ID PHP сессии
Восстанавливать доступ к FreePBX с помощью процесса amportal, который отвечает за управление FreePBX из под командной строки Linux
amportal a u xxxxxxxxxxxxxxxx
Команда выполняется с ключом ”u”, который означает unlock – разблокировку, а xxxxxxxxxxxxxxx – это ID PHP сессии. Чтобы его узнать, переходим на страницу входа в FreePBX по адресу http://IP_адрес_FreePBX/admin:
Теперь нажмите сочетание клавиш Ctrl + A, тем самым выделив всю рабочую область в окне браузера. В нижней части экрана вы увидите скрытые символы – это и есть ID вашей PHP сессии (на скриншоте ниже выделено красным). Скопируйте это значение:
Переходим в консоль сервера и даем команду вместе с полученным ID сессии:
[root@localhost ~]# amportal a u hrotp4v1qu87t7dhiu887jk9g7
Please wait...
!!!!amportal is depreciated. Please use fwconsole!!!!
forwarding all commands to 'fwconsole'
Unlocking: hrotp4v1qu87t7dhiu887jk9g7
Session Should be unlocked now
[root@localhost ~]# [root@localhost ~]#
Готово. Теперь возвращаем вкладку с FreePBX, где мы получили ID сессии, и обновляем страницу (нажмите F5). После обновления мы попадаем в административный интерфейс FreePBX. Теперь вы можете перейти во вкладку Admin -> Administrators, и создать там новые реквизиты администратора:
REST API — это архитектурный паттерн для создания веб-сервисов. REST — это набор правил, которые описывают лучшие практики обмена данными между клиентами и серверами. Они используют HTTP-запросы для манипулирования данными и взаимодействия с веб-сервисами. API REST не имеют статистики, кэшируются и согласованы. Отлично подходят для создания универсальных и масштабируемых веб-приложений. Три основных фреймворка Python - Django, Flask и FastAPI.
В этом материале мы рассмотрим FastAPI, веб-фреймворк с открытым исходным кодом, используемый для создания API на Python.
Что такое FastAPI?
FastAPI — это современный и высокопроизводительный веб-фреймворк для создания API на Python 3.6+, основанный на стандартных подсказках типов Python. FastAPI работает очень быстро благодаря встроенной поддержке функции async в Python 3.6+.
FastAPI был выпущен в 2018 году и создан Себастьяном Рамиресом. Рамиреса не устраивали существующие фреймворки, такие как Flask и DRF, поэтому он создал свой собственный фреймворк, используя такие инструменты, как Starlette и Pydantic. Сейчас многие крупные технологические компании, такие как Uber, Netflix и Microsoft, используют FastAPI для создания своих приложений.
Возможности FastAPI
FastAPI обладает множеством замечательных функций. Давайте рассмотрим их:
Высокая производительность: FastAPI работает быстро. Он считается одним из самых быстрых фреймворков Python, доступных в настоящее время.
Надежность: вы можете создавать готовый к производству код с помощью автоматической интерактивной документации.
Интуитивно понятный интерфейс: FastAPI был разработан, чтобы быть простым в использовании и изучении. Он предлагает отличную поддержку редактора и документацию.
Быстрое создание кода: FastAPI увеличивает скорость разработки на 200-300 %.
Меньше ошибок: сокращает около 40 % возникающих ошибок.
Совместимость: он хорошо работает с открытыми стандартами APIS, OpenAPI (ранее известный как Swagger) и JSON-схемами.
Плагины: вы можете легко создавать плагины, используя инъекцию зависимостей.
Подсказки типов: вы можете использовать подсказки типов для проверки и преобразования данных.
Сравнение Flask и FastAPI
В этом разделе мы рассмотрим Flask и FastAPI. Мы обсудим их плюсы, минусы и варианты использования.
Flask
Flask - это микрофреймворк для Python. В его состав входят ORM, кэширование и аутентификация. Он был разработан для создания веб-приложений на Python. Он считается простым, быстрым и масштабируемым.
Плюсы:
— Гибкость: вы можете управлять большинством аспектов Flask.
— Интуитивность: Flask отлично подходит для новичков благодаря своей простоте.
— Встроенный сервер разработки: эта встроенная функциональность, а также интегрированная поддержка позволяют легко проводить модульное тестирование.
Минусы:
— Нет проверки данных: в Flask можно передавать данные любого типа. Это может привести к частым сбоям в работе программ.
— Время: в системе есть один источник, который обрабатывает запросы по очереди, что означает, что на обработку запросов может уйти некоторое время.
Flask обычно используется для таких проектов, как:
Системы электронной коммерции
Боты для социальных сетей
Социальные сети
Статические веб-сайты
FastAPI
FastAPI - это современный высокопроизводительный веб-фреймворк. Он используется для создания веб-интерфейсов.
Плюсы:
— Валидация данных: проверяет тип данных даже во вложенных JSON-запросах.
— Обработка исключений: с помощью FastAPI можно легко обрабатывать исключения.
— Поддержка асинхронного кода: поддерживается асинхронный код с использованием ключевых слов async/await Python.
Минусы:
— Проверка запросов: FastAPI использует Pydantic для проверки запросов. Этот процесс не всегда интуитивно понятен и иногда требует написания собственного валидатора.
— Небольшое сообщество: поскольку фреймворк все еще довольно новый, сообщество в нем меньше, чем в других фреймворках.
FastAPI обычно используется в таких проектах, как:
Внутреннее антикризисное управление
Развертывание моделей машинного обучения
Создание учетных записей, логинов и аутентификации для веб-приложений
Hello World в FastAPI
Давайте немного попрактикуемся в работе с FastAPI! Мы рассмотрим простой Hello World! и разберем его на части.
Чтобы запустить сервер, нужно выполнить следующую команду:
Давайте разберемся, что к чему:
main: относится к имени файла
app: обозначает объект FastAPI, созданный внутри файла hello.py
--reload: параметр, который заставляет сервер перезапускаться после изменения кода
Давайте разберем наш код «Hello World!»:
Строка 1: мы импортируем FastAPI, который является классом Python, предоставляющим всю функциональность API.
Строка 3: мы создаем экземпляр класса FastAPI и называем его app. Это приложение, на которое ссылается uvicorn в приведенной выше команде.
Строка 5: создаем путь GET.
Строка 6: определяем функцию, которая будет выполняться всякий раз, когда кто-то посетит указанный выше путь.
Строка 7: мы возвращаем ответ клиенту при каждом обращении к пути.
Основные блоки FastAPI
Давайте рассмотрим некоторые строительные блоки FastAPI, включая параметры пути, параметры запроса и тело запроса.
Параметры пути
Параметры пути помогают ограничить вызов API одним ресурсом, что означает, что вам не нужно создавать тело запроса для такой простой вещи, как поиск ресурса.
Эти параметры заключаются в фигурные скобки {} и позволяют управлять представлением определенных ресурсов. Они размещаются перед строкой запроса и в пути конечной точки.
Давайте рассмотрим, как их использовать:
Значение параметра path course_name будет передано в функцию read_couse() в качестве аргумента course_name.
Параметры запроса
Параметры запроса являются необязательными. В FastAPI параметры функции, не объявленные как часть параметров пути, автоматически интерпретируются как параметры запроса.
Давайте посмотрим на пример кода:
Запрос - это набор пар ключ-значение, которые идут после вопросительного знака ? в URL-адресе и разделяются амперсандом &.
Взгляните на следующий URL:
http://localhost:8000/courses/?start=0&end=10
Его параметры запроса следующие: начинаются со значения 0 и заканчиваются значением 10.
В строке 8 кода мы передаем два параметра запроса, которые ожидает наш API.
Тело запроса
Тело запроса - это данные, отправляемые клиентом вашему API. Чтобы объявить его в FastAPI, мы можем использовать модели Pydantic.
Давайте посмотрим на примере, как это можно сделать:
Давайте разберем эти части:
Строки 1-3: импортируем необходимые пакеты.
Строка 5: мы объявляем модель данных запроса.
Строка 11: создаем экземпляр класса FastAPI.
Строка 13: создаем путь POST.
Строка 14: добавляем модель данных запроса в путь.
Что изучать дальше
Поздравляем вас с первыми шагами в работе с FastAPI! FastAPI — это легкий веб-фреймворк для Python. Он позволяет создавать API легко, быстро и эффективно. Если вы заинтересованы в разработке веб-приложений, изучение FastAPI позволит вам быть впереди всех. Чтобы освоиться с фреймворком, мы предлагаем вам углубиться в него и поработать над несколькими проектами.
