Самое важное в конце. сам алгоритм обучения, ранее я написал мысли ребят, что бы был виден рост, через сомнения в собственных силах, но ведь все получается.
Сначала предыистия вот парень ник keplerde. Прочтите его сообщения они расположены в обратном порядке.
Сегодня он уже читает исходный код Джанго, но ранее писал:
Наверное буду переходить к практике Джанго, если будут непонятные моменты, буду искать суть и также структуировать в Jupyter Lab...
Впереди ООП.. так что работы еще предстоит много..
Считывание параметров оказалось той базой, которая лежит повсюду.. везде что то передаётся!
А вот сообщение свежее, согласитесь уже веселее, уровень то вырос.
Проанализировал Тога в сравнении с Джанго исходниками, и в общем то да я понял что хотел показать Валерий)
Получается что разработчики всё выносят в один файл инициализатора, всё это - атрибуты...
Тогда следующая ступнька это пункт 12 и и 13 "Выписать уже эти самые слои и разобрать с исключениями"
Немного пугающий конечно механизм как это всё прикрепляется, api, db и т.д.
Даже не само прикрепление, как взаимодействие в совокупности...
Большое спасибо Валерию, едем дальше)!
Теперь то зачем писал эту статью, рекомендации ребятам, очень конкретные.
Что делать и как делать на примере параметров функций. В основе лежит система обучения В. Бовсуновского.
часть 1.
Денис, но ведь, Вы делом занимаетесь и реально разбираетесь с программированием, а люди, годами решают какие мутные задачи на таких мутных сайтах и потом удивляются, почему они не пишут.
Вот, вы сейчас учитесь писать. Да. сложно. Но ведь получается и двигается дело. Именно так и будете программировать профессиональный код.
Ведь это как в жизни, особенно у кого есть авто или у девчат своя швейная машинка.
С авто начал потиху чего-то менять, чинить и смотришь разбираешься.
Или для девчат, начала чего-то шить сама и смотришь уже не отличишь от заводского.
---------------------------------------
Важно себе сказать, что буду изучать профессиональный код, просто делать постепенно.
Открыл ничего не понимаешь.
Изучил переменные. Ага, уже их видишь и читаешь.
Изучил функции и параметры, ага видишь их.
Так ступенька за ступенькой и потом начинаешь понимать логику, но не каким-то случайным образом, а потому что идёшь по ступенькам.
-----------------------------------------------------------------------------------------------------------------------------
Про слои. Это часто упоминает Линус.
На самом деле все то же самое. что и в жизни у нас происходит.
Например, в квартире у каждого есть кухня, спальня, зал и т.д. И хозяин квартиры. чётко знает, что где находится и улучшает квартиру, покупает красивый шкаф в спальню и .т.д.
Слои, как бы дают возможность видеть код целиком или можно сказать навести порядок в коде, что бы было понятно и легко читалось, тогда легко поддерживать, нет путаницы.
Вы можете назвать это. как хотите (по сути это способ организации кода).
Просто наверное самое удачное название придумал Линус. (назвав слои)
Вот его цитата:
"Мне нравятся программисты, которые видят слои кода....."
Но ведь по крайне мере то интервью, которое я смотрел с ним, где разработчики написали от 12 строк кода и более, Линус свёл в 4 строки.
Вот почему нужно организовать код так, что бы видеть его и думать им. тогда можно улучшить легко. исходя из решаемой задачи.
Я думаю, что прежде чем придумывать своё, нужно взять опыт ребят(джанго, тога) и попробовать понять и применить. Ведь эти продукты разрабатываются годами.
P.S Я смотрю вон sergey83, пришёл сначала тоже ничего не мог, потиху потиху пошло у него.
часть 2.
Дополню, фрагмент, вот с этого предложения, что бы не было не верно понятно(особенно новичками)
"а люди, годами решают какие мутные задачи на таких мутных сайтах и потом удивляются, почему они не пишут."
Важно и нужно решать задачи и работать в jupyter.
Здесь важно понимать, где и когда решать.
- На этапе, например, когда мы изучаем функции и параметры функций.
Здесь, мы просто решаем по учебнику.
Цель понять суть.
https://docs.python.org/3/tutorial/controlflow.html#defining-functions
- Все вроде бы поняли.
Ставим новую задачу, научится считывать.
Но уже на реальном коде. (видеть и считывать моментально) . Запоминать ничег оне нужно, просто работать регулярно, само отложится.
https://github.com/django/django/blob/main/django/shortcuts.py
STOP. Пояснение. Посмотрите на пункт 1 и пункт 2. Они разные. Так вот многие ребята на первом пункте застревают на долго, многие на годы и потом удивляются. почему не получается писать код.
Все просто. Мы решили словить рыбу. Купили удочку и каждый день её дома раскладываем, оснащаем, делаем для неё. какие дополнительные примочки. Но ведь так мы рыбу не поймаем, нам нужно идти на водоем и забрасывать удочку в воду.
- Дальше продолжается работа уже с настоящим кодом(реальным)
https://github.com/django/django/blob/main/django/shortcuts.py
смотрим исходный код строка 64
def get_object_or_404(klass, *args, **kwargs):
идём в доки
https://docs.djangoproject.com/en/4.1/topics/http/shortcuts/
складываем доки и исходный код.
Нужно ответить на вопрос, почему разработчики поступили именно так,
def get_object_or_404(klass, *args, **kwargs):
Нужно начать писать реальный код, что бы получить ответ:
def post_detail_view(request, pk):
# source stuff
handle_page = get_object_or_404(Post, id=pk)
#example blog_views_PostDetailView.ipynb
Если б не был указан первый параметр, как обязательный позиционный и не верно было выбрано имя, то на вряд ли разрабочики использовали бы правильно, а так все интуитивно,
нужно добавить модель класса, обязательно
STOP. Пояснение. Пытаемся написать логически. что то своё. но учитывая уже сторону тех кто будет использовать. Теперь параметры приобретают смысл и задают логику функции, для конечного пользователя.
- Теперь нам нужно взять любую библиотеку, я обычно даю Pandas.
https://pandas.pydata.org/
У Pandas есть функции (смотреть доки), там не только классы.
Нужно понять их суть (работаем в jupyter). Разобрались.
Теперь нам нужно написать свою функцию, которая будет использовать функции Pandas.
STOP. Пояснение. Запомните, все программы имеют логику, прежде чем писать наши функции давайте увидим шаблон организации кода в Джанго.
Вот смотрите на эту функцию.
def get_object_or_404(klass, *args, **kwargs):
Звонки get()на заданном менеджере моделей, но это поднимает Http404вместо модели DoesNotExistисключение.
вернёт страницу, если не существует страницы, то вернёт исключение 404(нет такой страницы)
Теперь смотрите на первый параметр klass.
def get_object_or_404(klass, *args, **kwargs):
Эта функция предполагает, что класс уже есть. То есть ранее была написана модель, здесь он называется Post и менно она должна быть передана. как первый входной параметр, улавливаете логику.
class Post(models.Model):
class Meta:
verbose_name = 'Создать пост'
verbose_name_plural = 'Создать посты'
# поля модели
title = models.CharField(max_length=200, help_text="не более 200 символов",
db_index=True, verbose_name="Напишите заголовок") # настройки полей
STOP. Пояснение. На данный кусок кода мы можем посмотреть, как на загатовки кода.
- Был реализован механизм создания моделей, используя, который пользователь созда свою модель.
- Разработчики подумали и решили облегчить жизнь разработчикам их продука и решили создать функцию, которая будет делать две вещи:
запрашивать страницу
если нет страницы, возвращать исключение.
STOP. Пояснение. Создатели Джанго постоянно смотрят глазами разработчиков. которые будут использовать их продукт.
- Возвращающемся к нашей затеи в шаге 4. использовать Pandas, для своей разработки.
Планируем.
Нам нужно создать мини фреймфорк из пары функций на основе Pandas.
- Первая функция будет готовить данные для второй. (как механизм моделей джанго даёт возможность создать модель)
- Вторая функция будет эти данные обрабатывать.Например выводить табличкой и сразу же сливать в файл и так же создавать лог.
То есть аж три действия.
А теперь есть почва для размышления, что за готовую функцию нам выбрать с Pandas и соответсвенно, какие данные для этого нужны и как мы их будем вводить (откда получать), можно например с файла(чуть усложнить)
Так решаем этот вопрос до реализации.
вторая функция уже может получать данные с первой, и делать то , что нужно, например выводить в html, сохранять в файл.
и дальше можно до бесконечности. Не забывайте сейчас мы работаем с параметрами функций и наша задача. что бы осмысленно они были прописаны от отвечали требованиям, что бы например пользователь точно ввёл данные, которые нужно, здесь можно позаботится о исключениях, если что-то воодит не так. и т .д. смысл понятен, нужно просто пробовать делать и все получится.
STOP. Пояснение. Мы ведь все время работали с параметрами. Таким образом они точно будут усвоены.
Что может делать дальше и без разницы в каком порядке (вернее по необходимости)
Как мы делали рассматривали кусок кода
https://www.youtube.com/playlist?list=PLuZJ9n46uMzVQLs2u4hwjfcQkZ8QVKea1
https://github.com/beeware/toga/blob/main/core/src/toga/app.py
строка 27
class WindowSet(MutableSet):
строка 40
def add(self, window: Window) -> None:
if not isinstance(window, Window):
raise TypeError("Toga app.windows can only add objects of toga.Window type") # Silently not add if duplicate
STOP. Пояснение. Когда нам нужно исключение, то мы берём исходный код и смотрим, как написать.
STOP. Важное с чего начали в пункте 1.
Теперь пожалуйста открывайте jupyter notebook и работайте с
isinstance
if
not
raise TypeError
Но ведь сейчас иная ситуация. У вас есть смысл и вы его понимаете, для чего Вы будете прорабатывать и у вас в голове точно останется полуфабрикат.
Полуфабрикат. (немного другое чем шаблон. Я так называю ситуацию, когда нам нужно сделать некое действие. И оно может быть применено не стандартно.
Например, isinstance может помочь показать исключение, если пользователь введёт нечто иное от ожидаемого, и так же может быть использован для проверки экземпляра класса просто в методах класса.
Мы просто точно запомним. что если нечто проверить, то нам нужно isinstance.)
И далее прорабатываем все части этой конструкции
isinstance
if
not
raise TypeError
То есть ищем в доках, убеждаемся, что понимаем.
Делаем все в jupyter notebook.
И как я говорю обычно, что есть вещи значимые. например параметры функций, они должны быть усвоены твёрдо и отработаны по системе до полного понимания. А вещи. такие как
if
not
raise TypeError
могут быть проработаны в любом порядке, здесь имеет значение. смысл использования, когда у вас есть ситуация конкретная, то это легко понимается.
на этом сегодня все. Пробуйте так делать.
STOP. Пояснение.
Что нельзя делать, но делают на большинстве курсов и оттуда выходят не программисты, а люди с кашей в голове.
Изучать язык программирования, так как составлены учебники на оф. сайтах программирования.
Как справочники(на оф. сайтах это оправдано. так как легче искать)
Но изучение по порядку и без смысла(когда изучающий не знает для чего это), то есть нет реальной ситуации.
Теперь Вы понимаете, почему в нашей школе используется особенная система изучения программированию, мы выделяем одни вещи, например такие, как параметры функций. которые должны быть разобраны до автоматизма, от дру8гих вещей, таких как
if
not
и т .д
Которые нет смысла изучать, ради того. что изучать, а проще пройти алгоритм, который описан и встретив эти вещи изучить их в смысловом контексте применения, тогда и учить то ничего не нужно.
мы та же делаем упор на исходный код и на документацию.
Ведь это логически, если мы идём на рыбалку, то нам не нужно сидеть и читать про все снасти, когда мы хотим пойти половить на удочку.
Обратите внимание ведь у любой снасти (спиннинг, удочка, фидер), будет леска и крючок.
Если мы завтра пойдём ловить на фидер, то нам нужно будет просто добавить навыков - заброс и т .д, но ведь мы уже будем знать, что есть леска и крючок.
так же и в программировании, если мы написали исключение и там были
if
not
То в другом коде, мы будем знать, что это и просто расширим опыт.
Суть. Важно всегда придерживаться, что бы Вы понимали зачем (это отсутствует на курсах, где изучают подряд материл - бессмысленно и потеря времени)
В нашей школе мы пишем код и уже делаем работу программиста, как результат, пишут все кто хочет и не так то это сложно, если объяснить.
Как поступить в школу программирования?
Интересен мой подход, получите доступ недорого:
Выбери свой доступ.
Рекомендуется оценить мощь. Обязательно глянь подборку видео, как растут ребята, у тебя тоже получится.
Подборка видео, для прорыва в мозгах, изменит подход к изучению программирования.
https://spb-tut.ru/programming_school/python-programming-video/
Джанго + Питон:
https://spb-tut.ru/programming_school/pay-django4/
Либо Джанго + Питон + Блокчейн:
(Хит продаж) Внизу страницы 400 BYN:
https://spb-tut.ru/programming_school/pay-dapp-spb-tut-ru/
Обучение программированию по индивидуальной программе.
https://spb-tut.ru/programming_school/individual-programming-training/
Групповые занятия по программированию.
https://spb-tut.ru/programming_school/group-programming-lessons/
Все получится точно.