mirror of https://github.com/tiangolo/fastapi.git
116 lines
3.8 KiB
Markdown
116 lines
3.8 KiB
Markdown
# Отладка
|
||
|
||
Вы можете подключить отладчик в своем редакторе, например, в Visual Studio Code или PyCharm.
|
||
|
||
## Вызов `uvicorn`
|
||
|
||
В вашем FastAPI приложении, импортируйте и вызовите `uvicorn` напрямую:
|
||
|
||
```Python hl_lines="1 15"
|
||
{!../../docs_src/debugging/tutorial001.py!}
|
||
```
|
||
|
||
### Описание `__name__ == "__main__"`
|
||
|
||
Главная цель использования `__name__ == "__main__"` в том, чтобы код выполнялся при запуске файла с помощью:
|
||
|
||
<div class="termy">
|
||
|
||
```console
|
||
$ python myapp.py
|
||
```
|
||
|
||
</div>
|
||
|
||
но не вызывался, когда другой файл импортирует это, например:
|
||
|
||
```Python
|
||
from myapp import app
|
||
```
|
||
|
||
#### Больше деталей
|
||
|
||
Давайте назовём ваш файл `myapp.py`.
|
||
|
||
Если вы запустите его с помощью:
|
||
|
||
<div class="termy">
|
||
|
||
```console
|
||
$ python myapp.py
|
||
```
|
||
|
||
</div>
|
||
|
||
то встроенная переменная `__name__`, автоматически создаваемая Python в вашем файле, будет иметь значение строкового типа `"__main__"`.
|
||
|
||
Тогда выполнится условие и эта часть кода:
|
||
|
||
```Python
|
||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||
```
|
||
|
||
будет запущена.
|
||
|
||
---
|
||
|
||
Но этого не произойдет, если вы импортируете этот модуль (файл).
|
||
|
||
Таким образом, если у вас есть файл `importer.py` с таким импортом:
|
||
|
||
```Python
|
||
from myapp import app
|
||
|
||
# Some more code
|
||
```
|
||
|
||
то автоматическая создаваемая внутри файла `myapp.py` переменная `__name__` будет иметь значение отличающееся от `"__main__"`.
|
||
|
||
Следовательно, строка:
|
||
|
||
```Python
|
||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||
```
|
||
|
||
не будет выполнена.
|
||
|
||
/// info | "Информация"
|
||
|
||
Для получения дополнительной информации, ознакомьтесь с <a href="https://docs.python.org/3/library/__main__.html" class="external-link" target="_blank">официальной документацией Python</a>.
|
||
|
||
///
|
||
|
||
## Запуск вашего кода с помощью отладчика
|
||
|
||
Так как вы запускаете сервер Uvicorn непосредственно из вашего кода, вы можете вызвать Python программу (ваше FastAPI приложение) напрямую из отладчика.
|
||
|
||
---
|
||
|
||
Например, в Visual Studio Code вы можете выполнить следующие шаги:
|
||
|
||
* Перейдите на панель "Debug".
|
||
* Выберите "Add configuration...".
|
||
* Выберите "Python"
|
||
* Запустите отладчик "`Python: Current File (Integrated Terminal)`".
|
||
|
||
Это запустит сервер с вашим **FastAPI** кодом, остановится на точках останова, и т.д.
|
||
|
||
Вот как это может выглядеть:
|
||
|
||
<img src="/img/tutorial/debugging/image01.png">
|
||
|
||
---
|
||
|
||
Если используете Pycharm, вы можете выполнить следующие шаги:
|
||
|
||
* Открыть "Run" меню.
|
||
* Выбрать опцию "Debug...".
|
||
* Затем в появившемся контекстном меню.
|
||
* Выбрать файл для отладки (в данном случае, `main.py`).
|
||
|
||
Это запустит сервер с вашим **FastAPI** кодом, остановится на точках останова, и т.д.
|
||
|
||
Вот как это может выглядеть:
|
||
|
||
<img src="/img/tutorial/debugging/image02.png">
|