Яндекс практикум «Основы Python» на локальном компьютере

Предисловие

Недавно для себя открыл сервис Яндекса — Практикум. Мне очень понравилась идея, и я прошёл серию бесплатных уроков курса Python beckend-разработчик. Бесплатный курс называется «Основы Python»

Хоть я и не новичок в Python-е, но курс для меня оказался очень полезным. Он учит не только основам программированию, но и правильному подходу к работе для новичков.

У меня отец хотел научиться. Ему, между прочим, 75 лет. Он попробовал, но у него не получилось. Камнем преткновения оказалось развернуть и пользоваться у себя на компьютере какую-нибудь IDE. Он начал изучать по книжке, а в книжке ничего про это не было.

Ему просто хотелось попрактиковаться программированию, понять вообще что это такое, приобщиться к новому опыту. И самое главное, просто понять, что это за программирование такое. Я разбираться в новом и непонятном редакторе IDE ему не хотелось.

Я как только натолкнулся на этот практикум, сразу вспомнил про отца. Это действительно то, что нужно, чтобы вникнуть в суть программирования без лишних заморочек и просто понять, твоё это или нет.

На данный момент, отец прошёл несколько уроков и втянулся. Посмотрим, чем это всё закончится.

Что я хочу сделать

Курс Яндекса устроен таким образом, что тебя как будто берут стажёром в IT-компанию. Там тебе дают в разработку небольшой проект, и ты постепенно его разрабатываешь начиная с самых азов и довольно глубоко.

Всё это происходит онлайн и соответственно весь этот проект остаётся на серверах Яндекса. А мне хочется получить этот проект, сначала, локально, затем, с ним поэкспериментировать и, наконец, выложить на Github-е.

Установка Python, Django и IDE PyCharm

У меня стоит совершенно новая система UBUNTU MATE 20.04, и все установки и настройки буду описывать именно для неё.

Установка Python

На самом деле в Ubuntu 20.04 уже стоит Python 3.8.2 и его устанавливать не надо. Но в будущем потребуется устанавливать различные модули, а для этого нужен менеджер пакетов pip.

sudo apt-get install python3-pip Code language: JavaScript (javascript)

Указанная выше команда установит пакетный менеджер и Python теперь полностью готов для работы.

Установка Django

Проект курса Яндекса использует Framework Django, а значит установить его нужно обязательно.

Вообще, насколько мне известно, установить Django можно тремя разными способами: в проект, текущему пользователю и в систему.

При установке локальному пользователю, консольные команды Django не попадают в пути по умолчанию $PATH, и вызывать их приходиться прописывая полный путь: ‘~/.local/bin/django-admin.

Часто вызывать такую команду не очень удобно, поэтому я решил установить Django в систему:

sudo python3 -m pip install django --system

Установка PyCharm

Конечно PyCharm не единственная IDE для разработки на Python, но я к ней уже привык.

Установить бесплатную версию PyCharm можно командой:

sudo snap install pycharm-community --classic

При первом запуске PyCharm можно выбрать светлую или тёмную тему. Я выбираю тёмную тему.

Резюме

Подводя итоги, нам понадобилось всего три команды:

sudo apt-get install python3-pip # Установка 
                                 # менеджера пакетов Питона
sudo python3 -m pip install django --system # Установка Django
sudo snap install pycharm-community --classic # Установка 
                                              #        PyCharmCode language: PHP (php)

Знакомство с Django

Знакомство с Django на курсе Яндекс начинается уже с подготовленного проекта.

Так обычно и бывает в жизни. Редко когда бывает, что ты устраиваешься на работу и сразу начинаешь новый проект. Ты, как правило, продолжаешь вести какой-то уже начатый другими проект.

Однако, мне нужно, чтобы всё заработало на моём локальном компьютере. А для этого нужно создать проект. Проект будет называться «Anfisa for Friends». Это аналог Алисы Яндекса.

Создание Python-проекта в PyCharm

Сперва наперво, мы создаём пустой проект со следующими установками:

Настройки проекта PyCharm

Создание Django-проекта

Теперь заходим в директорию нашего проекта и создаем каркас приложения на Django:

django-admin startproject anfisa4friends

В результате получаем структуру нового проекта:

Структура Django-проекта

Структура получилась не совсем такая, как в курсе Яндекса.

Во-первых, нужно было запустить ‘django-admin’ не в папке проекта, а в папке проектов. Я это переделаю.

Запуск Django-проекта

Остальными переделками я займусь позже, а сейчас нужно проверить работает ли Django. Для этого в папке проекта запускаем:

python3 manage.py runserverCode language: CSS (css)

Теперь нужно перейти в браузер и набрать в строке адреса: http://127.0.0.1:8000/.

Если всё работает, то в окне браузера должно появиться следующее:

Успешный запуск Django

Ура! Ура! Ура-а-а-а! Всё работает!

Резюме

Как выяснилось для работы с Django нет необходимости сначала создавать Python-проект.

Для знакомства с Django мы используем две команды:

django-admin startproject anfisa4friends # создание проекта
python3 manage.py runserver # запуск проектаCode language: PHP (php)

Проверить работу сайта проекта можно по адресу: http://127.0.0.1:8000/

Все ошибки или предупреждения можно прочитать в терминале.

Следующая команда обновляет базу данных и все предупреждения исчезают.

python3 manage.py migrate  # Обновление базы данных проектаCode language: CSS (css)

И так, у нас есть каркас Django-проекта, который работает, и что-то там печатает в окне браузера.

Знакомство с Git

Однако, нам хотелось бы, чтобы проект печатал не абы какой текст, а наш текст. К тому же в терминале, при запуске проекта, выскакивает предупреждение, суть которого в том, что проект может работать неправильно, до запуска python3 manage.py migrate.

Чтобы всё это исправить, нужно внести изменения. Самый простой способ это сделать — это удалить лишние файлы, а содержимой оставшихся файлов заменить содержимым файлов из курса Яндекс практикума.

Однако, в этом случае мы не поймём, какие изменения были сделаны и нечему не научимся. Нам необходимо сравнить файлы в нашем проекте с файлами в проекте Яндекса, а ключевые изменения понять и запомнить.

Для контроля всех изменений в проекте, и особенно изменений в файле с одинаковым названием, существует система контроля версий Git.

Установка Git

В моей версии Ubuntu Git не установлен по умолчанию. Установить Git можно следующей командой:

sudo apt install git  # Установка утилиты GitCode language: PHP (php)

Создание git-репозитория

Для сравнения различных версий, нам нужно сохранить состояние До и состояние После. Все эти состояние проекта будут хранится в git-репозитории. Для его создания нужно в корне проекта запустить команду:

git init  # Создания git-репозиторияCode language: PHP (php)

Для того, чтобы убедиться, что репозиторий создан, и посмотреть его статус, существует специальная команда:

git status

Если репозиторий успешно создан, мы увидим следующий вывод в терминале:

Команда git status

Сообщение «Ещё нет коммитов» говорит о том, что в репозитории ещё ничего не сохранено. А красным выделены файлы и папки, которые могут быть сохранены.

Настройка git-репозитория

Для правильной работы git-репозитория требуются учётные данные. Они задаются следующими командами.

git config --global user.email "deviur@yandex.ru"
git config --global user.name "Deviur"Code language: PHP (php)

Добавляем файл .gitignore

Если теперь запустить проект, то в проекте автоматически будут созданы две папки.

Какие файлы исключить с .gitignore

Эти папки нам не нужно сохранять в проект.

Для того чтобы исключить папки и файлы из проекта используется файл ‘.gitignore’. В этот файл записывается всё, что не нужно включать в проект.

.idea/
anfisa4friends/__pycache__/

Сохранение текущего состояния проекта

Прежде всего нам нужно выбрать какие файлы и папки добавить в репозиторий.

Чтобы добавить все доступные файлы используется следующая команда:

git add .  # добавить файлы для сохранения в git-репозиторийCode language: PHP (php)

Теперь вывод `git status` показывает все изменения, которые произошли с файлами, которые мы добавили.

Результат команды git status

Как видно, коммитов ещё нет. Это значит текущее состояние мы ещё не сохранили. Мы только отметили, какие изменения и какие файлы сохранить.

Теперь сохраняем текущее состояние проекта в репозиторий:

git commit -m'Start Django-project'
Code language: JavaScript (javascript)

Ура! Проект сохранён в git-репозитории. Теперь он имеет следующую структуру.

k

Резюме

Для начала работы с Git и сохранения нашего проекта мы использовали следующие команды:

sudo apt install git  # установка Git

git init  # создание git-репозитория
git status  # проверка состояние git-репозитория

# Настройка учётных данных git-репозитория:
git config --global user.email "deviur@yandex.ru"
git config --global user.name "Deviur"

git add .  # добавить файлы для сохранения в git-репозиторий
git commit -m'Start Django-project'  # сохранить проект 
                                     #           в репозиторийCode language: Bash (bash)

Пишем проект anfisa4friends

Минимальные изменения

Ниже привожу минимум изменений, которые необходимо сделать в файлах нашего проекта, чтобы всё заработало, как требуется на курсе Яндекса.

Ниже красным обозначено, то что нужно удалить, а синим то, что нужно вставить.

  1. Удаляем все файлы, которых не должно быть в проекте.
  2. В файле ‘settings.py‘ удаляем строку:
    WSGI_APPLICATION = 'anfisa4friends.wsgi.application'
    (остальное можно не менять).
  3. В файле ‘urls.py‘ после строки
    from django.contrib import admin
    вставляем
    from homepage import views as home_views,
    а также, ниже изменяем список urlpatterns на следующий:
    urlpatterns = [
    path('', home_views.index),
    ]
  4. Создаём папку ‘homepage‘.
  5. Создаём в этой папке файл ‘views.py’ со следующим кодом:
    from django.http import HttpResponse
    def index(request):
    return HttpResponse('Anfisa for Friends -- Hello, world! -- ¯(°:°)/¯')

Теперь запускаем проект и смотрим. Всё должно работать!

Что я не стал менять

У нас получилось три версии проекта anfisa4friends:

  1. Версия сохранённая на Яндекс-практикуме.
  2. Версия созданная Django, которую мы сохранили в git-репозитории.
  3. И последняя версия, с изменениями, которые мы сделали в предыдущем разделе.

Часть кода я умышленно не стал делать в точности как на курсе Яндекс-практикума. Код созданный Django мне показался более изящным. Посудите сами:

# Код созданный Django
BASE_DIR = Path(__file__).resolve().parent.parent

# Код с курса Яндекс-практикума
BASE_DIR = os.path.dirname(
                     os.path.dirname(os.path.abspath(__file__))
                     )Code language: PHP (php)

Эти два куска кода делают одно и тоже, но используют две разные библиотеки.

На самом деле, проект Яндекс-практикума не использует базы данных, и не совсем понятно, зачем вообще этот кусок кода в проекте. Я не стал ничего удалять, но закомментировал.

Знакомство с Github.com

Структура git-репозитория

Я планирую повторно пройти курс Яндекс-практикума, но уже на локальном компьютере. Поэтому в git-репозитории проекта будет три ветки:

  1. tasks (задания) — здесь будет код, который дан, как условие в Яндекс-практикуме.
  2. solutions (решения) — здесь мой код, который я предложил в качестве решения и Яндекс его принял, как правильный.
  3. master — основная ветка, в которой вы можете экспериментировать или пройти курс самостоятельно.

Создание структуры веток git-репозитория

У меня Яндекс-практикум уже пройден и сохранены только решения, поэтому начну с ветки solutions.

Для создания ветки и переключения на неё используется следующая команда:

git branch solutions  # создание ветки solutions
git checkout  # переключение на ветку solutionsCode language: PHP (php)

Теперь сохраню в это ветку последовательно решения всех уроков Яндекс-практикума. В первый коммит будет сохранено моё решение на задачу из темы (topic) №9 урока (lesson) №4.

git commit -m'Solution: topic 9 lesson 4'Code language: JavaScript (javascript)

Ошибка проверки CSRF. Запрос отклонён.

При прохождении темы 11 на уроке 4 «POST-запросы» на Яндекс-практикуме стала выскакивать эта ошибка. В среде Яндекс-практикума всё работает, а на локальном компьютере, когда нажимаешь кнопку «Угостить» вылетает эта ошибка.

Пришлось покопаться в документации. В результате я внёс небольшие изменения в шаблон ‘index.html

Строку
<form action="/" method="post">,
я заменил на
<form action="/" method="post">{% csrf_token %}

Теперь всё заработало!

Выкладываем наш проект на Github

Для того, чтобы выложить проект на GitHub, у вас должен быть зарегистрированный аккаунт на github.com. У меня аккаунт зарегистрирован под именем «deviur«

Затем вы должны в интерфейсе GitHub создать свой проект. В нашем случае проект будет называться «anfisa4friends«

Далее на нашем локальном компьютере, нужно добавить в git-репозиторий адрес удалённого репозитория.

# Добавляем удалённый репозиторий
git remote add origin https://github.com/deviur/anfisa4friends.git

# Здесь deviur - моё имя пользователя на GitHub. Не забудьте заменить на своё.А anfisa4friends - это название проекта, который был создан на GitHub.
Code language: PHP (php)

Теперь остаётся только отправить наш проект на GitHub. Для этого используются следующие команды:

# Отправляем на удалённый репозиторий ветку master
git push -u origin master

# Отправляем на удалённый репозиторий ветку solutions
git push origin solutions
Code language: PHP (php)

Вот и готово! Теперь наш проект на GitHub-е. Теперь его всегда можно восстановить у себя на компьютере с помощью команды:

git clone https://github.com/deviur/anfisa4friends.git
Code language: PHP (php)

А ознакомиться с проектом можно по адресу: https://github.com/deviur/anfisa4friends


Задавайте вопросы, пишите пожелания и замечания в комментариях.