Предисловие
Недавно для себя открыл сервис Яндекса — Практикум. Мне очень понравилась идея, и я прошёл серию бесплатных уроков курса 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 # Установка
# PyCharm
Code language: PHP (php)
Знакомство с Django
Знакомство с Django на курсе Яндекс начинается уже с подготовленного проекта.
Так обычно и бывает в жизни. Редко когда бывает, что ты устраиваешься на работу и сразу начинаешь новый проект. Ты, как правило, продолжаешь вести какой-то уже начатый другими проект.
Однако, мне нужно, чтобы всё заработало на моём локальном компьютере. А для этого нужно создать проект. Проект будет называться «Anfisa for Friends». Это аналог Алисы Яндекса.
Создание Python-проекта в PyCharm
Сперва наперво, мы создаём пустой проект со следующими установками:
Создание Django-проекта
Теперь заходим в директорию нашего проекта и создаем каркас приложения на Django:
django-admin startproject anfisa4friends
В результате получаем структуру нового проекта:
Структура получилась не совсем такая, как в курсе Яндекса.
Во-первых, нужно было запустить ‘django-admin’ не в папке проекта, а в папке проектов. Я это переделаю.
Запуск Django-проекта
Остальными переделками я займусь позже, а сейчас нужно проверить работает ли Django. Для этого в папке проекта запускаем:
python3 manage.py runserver
Code language: CSS (css)
Теперь нужно перейти в браузер и набрать в строке адреса: http://127.0.0.1:8000/.
Если всё работает, то в окне браузера должно появиться следующее:
Ура! Ура! Ура-а-а-а! Всё работает!
Резюме
Как выяснилось для работы с 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 # Установка утилиты Git
Code language: PHP (php)
Создание git-репозитория
Для сравнения различных версий, нам нужно сохранить состояние До и состояние После. Все эти состояние проекта будут хранится в git-репозитории. Для его создания нужно в корне проекта запустить команду:
git init # Создания git-репозитория
Code language: PHP (php)
Для того, чтобы убедиться, что репозиторий создан, и посмотреть его статус, существует специальная команда:
git status
Если репозиторий успешно создан, мы увидим следующий вывод в терминале:
Сообщение «Ещё нет коммитов» говорит о том, что в репозитории ещё ничего не сохранено. А красным выделены файлы и папки, которые могут быть сохранены.
Настройка git-репозитория
Для правильной работы git-репозитория требуются учётные данные. Они задаются следующими командами.
git config --global user.email "deviur@yandex.ru"
git config --global user.name "Deviur"
Code language: PHP (php)
Добавляем файл .gitignore
Если теперь запустить проект, то в проекте автоматически будут созданы две папки.
Эти папки нам не нужно сохранять в проект.
Для того чтобы исключить папки и файлы из проекта используется файл ‘.gitignore’. В этот файл записывается всё, что не нужно включать в проект.
.idea/
anfisa4friends/__pycache__/
Сохранение текущего состояния проекта
Прежде всего нам нужно выбрать какие файлы и папки добавить в репозиторий.
Чтобы добавить все доступные файлы используется следующая команда:
git add . # добавить файлы для сохранения в git-репозиторий
Code language: PHP (php)
Теперь вывод `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
Минимальные изменения
Ниже привожу минимум изменений, которые необходимо сделать в файлах нашего проекта, чтобы всё заработало, как требуется на курсе Яндекса.
Ниже красным обозначено, то что нужно удалить, а синим то, что нужно вставить.
- Удаляем все файлы, которых не должно быть в проекте.
- В файле ‘
settings.py
‘ удаляем строку:WSGI_APPLICATION = 'anfisa4friends.wsgi.application'
(остальное можно не менять). - В файле ‘
urls.py
‘ после строкиfrom django.contrib import admin
вставляемfrom homepage import views as home_views
,
а также, ниже изменяем списокurlpatterns
на следующий:urlpatterns = [
path('', home_views.index),
] - Создаём папку ‘
homepage
‘. - Создаём в этой папке файл ‘views.py’ со следующим кодом:
from django.http import HttpResponse
def index(request):
return HttpResponse('Anfisa for Friends -- Hello, world! -- ¯(°:°)/¯')
Теперь запускаем проект и смотрим. Всё должно работать!
Что я не стал менять
У нас получилось три версии проекта anfisa4friends:
- Версия сохранённая на Яндекс-практикуме.
- Версия созданная Django, которую мы сохранили в git-репозитории.
- И последняя версия, с изменениями, которые мы сделали в предыдущем разделе.
Часть кода я умышленно не стал делать в точности как на курсе Яндекс-практикума. Код созданный 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-репозитории проекта будет три ветки:
- tasks (задания) — здесь будет код, который дан, как условие в Яндекс-практикуме.
- solutions (решения) — здесь мой код, который я предложил в качестве решения и Яндекс его принял, как правильный.
- master — основная ветка, в которой вы можете экспериментировать или пройти курс самостоятельно.
Создание структуры веток git-репозитория
У меня Яндекс-практикум уже пройден и сохранены только решения, поэтому начну с ветки solutions.
Для создания ветки и переключения на неё используется следующая команда:
git branch solutions # создание ветки solutions
git checkout # переключение на ветку solutions
Code 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
Задавайте вопросы, пишите пожелания и замечания в комментариях.