№1 Практическая онлайн-школа обучения языкам программирования Python (Django), JavaScript, Kotlin В. Бовсуновского.

Специальная, подарочная акция получения доступа к Django4!

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

37. Давайте сводить все в голове, что работало сохранение постов.

Мы с вами все сложили в голове. Исправили ошибки предыдущего кода и связали в голове, как будет работать код джанго с кодом js jquery ajax. И где нужно дописали

Перейти к уроку

38. Обзор. Далее пишем лайки, как в vk на Django + Ajax.

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

Перейти к уроку

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

-

Объясняю на примере. Пишем представление для лайков django + Ajax.

Нам уже знакомо, как это пишется, так как мы писали уже комментарии.

Но я кое-что не сказал вам, главное.

Теперь когда у вас есть представление от ранее написанного, давайте писать лайки, но смотреть на это под другим углом.

Обратите внимание, как называются уроки? Верно - профессионально учимся писать представления.

Вот на этом и заострим внимание на профессионализме.

Следите за моим рассуждением именно поиском логики мы заёмемся.

И главное понять, что никакой логики для нашего представления для языка пайтон и для джанго нет, ни джанго ни язык

ничего не знают о логике.

Но они хорошо могут делать определённые действия, при помощи методов.

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

именно поэтому мы создаём переменную liked(нравится) и для себя определяем, только для себя, но никак не для джанго или языка.

liked = False - не нравится.

liked = True - нравится.

А дальше начинает работать обыденная техническая сторона, а именно методы, которые хорошо умеет делать джанго.

Сначала, что б вам не дурили голову люди, которые вам будут перечислять навыки программирования, которые вы должны приобрести.

Я вам скажу все это у нас уже имеется.

Пример доказательство:

Мы заквасили бочку капусты, дальше себе думаем. что бы был сок и капкуста сохранилась нужно нажать её чем-то тяжёлым.

У нас в голове в нашей логике появляются два состояния придавлена крышка чем-то тяжелым или нет.

Это единственная логика, которая имеет значение, для сохранности капусты.

в программировании тоже самое можно выразить так:

cabbage_pressed = True (нажата)

cabbage_pressed = False (не нажата)

При этом заметьте, в программировании мы не создаём вторую переменную <капуста не нажата>, нам достаточно булевых значений TRUE (в любой ситуации ДА) - истина, FALSE - ложь (В любой ситуации НЕТ)

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

У вас в голове, есть, что - пойти и найти то чем нажать.

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

Теперь смотрите на код.

#


@login_required
def like_post(request):
    post = get_object_or_404(Post, id=request.POST.get('id'))
    # не понравилось
    liked = False
    if post.likes_post.filter(id=request.user.id).exists():
        post.likes_post.remove(request.user)
        liked = False

видите строку.

liked = False

что об этом коде джанго джанго. Нихрена. Единтсвенное, что знает джанго что это ключевое слово вбитое в язык питон, как ложь.

Это у нас в голове есть замысел и только мы программисты это знаем.

В отличие от бочки с капустой у нас аналагичная ситуация технически, для нас будет иметь значение сердечко красное - нравится, сердечко белое - не нравится.

Ещё раз повтроряю, джанго ничего не знает о наших замыслах.

Но зато мы знаем о джанго многое и о её методах.

Мы логически думаем так примерно. Лайк будет к посту(на самом деле не имеет значения к чему видео, аудио и т .д.) Просто в данном случае к посту.

значит что нужно? Найти этот пост.

post = get_object_or_404(Post, id=request.POST.get('id'))

мы создаём переменную post и мы знаем, что у Джанго есть функция. которая может вернуть объект, джанго может вернуть любой веб объект, она не знает. что это страница нашего блога,

она просто может вернуть.

https://docs.djangoproject.com/en/4.1/topics/http/shortcuts/#get-object-or-404

....(Post, id=request.POST.get('id')) согласно документации, нам нужно указать модель, мы знаем, что писали модель поста и дальше опять же мы обладаем знанием, что любая запись в базе данных имеет свой id, то есть номер по которому её можно оттуда извлечь, поэтому мы пишем

id=request.POST.get('id')

как искать id?

запросить , не понимаете, что такое request? посмотрите этот плейц лист

https://www.youtube.com/playlist?list=PLuZJ9n46uMzUJrTZSCrDB126PgGzIRH0e

Основными знаниями. которые мы обладаем что данные в http протоколе могут передаваться GET (то что мы видем в строке браузера)

и POST

прочтите

https://developer.mozilla.org/ru/docs/Web/HTTP/Methods/POST

request - запросить

https://docs.djangoproject.com/en/4.1/ref/request-response/

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

А что бы джанго позволила операцию. мы и пишем во первых.

как запросить

get('id')

get в данном случае это стандартный метод словаря питон

https://docs.python.org/3/library/stdtypes.html#dict.get

при этом мы его применяем, потому что знаем, что Джанго использует

словаре подобный класс, который понимает словари, поэтому мы можем использоват ьметод get словарей

https://docs.djangoproject.com/en/4.1/ref/request-response/#querydict-objects

нужно глянуть строки 61, 62

https://github.com/django/django/blob/main/django/http/request.py

и это гляньте внимательнее

https://www.youtube.com/playlist?list=PLuZJ9n46uMzUJrTZSCrDB126PgGzIRH0e

И последнее id - это мы у себя в голове знаем. что любая база данных сохраняет любую запись под определённм номером. который называется id, вот мы и указываем. что его нужно извлечь.

Обратите внимание в этой строке нет и намёка на идентификацию, пользователя, то есть мы не видим слово user

post = get_object_or_404(Post, id=request.POST.get('id'))

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

О том, кто может увидить запись мы позаботились заране вверху у нас стоит

@login_required

декоратор, который предполагает обязательную авторизацию пользователя.

Давайте прикинем, ведь мы пишим лайки и лайкать будет конкретный пользователь, значит нам его нужно определить, значит он обязательно должна быть авторизован, далее в шаблонах мы пропишем, что статью может увидеть и не авторизованный пользователь, но лайк поставить только авторизованный.(не заморачивайтесь, не хочу вас путать, пока это переворите)

Почему не получается у многих ребят писать, смотрите внизу знания и навыки.

Где собака порылась, отвлекаемся.

Но причина в другом. Пока мы не научимся отделять свою логику, что мы хотим сделать, от того что умеет делать джанго, мы не можем писать.

Почему?

Потому что мы и тольк омы хотим написать что-то, блог, бот, видео сервис и т .д. И логика известа только нам.

Джанго об этом ничего не знает.

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

ещё рас смотрите на это

get_object_or_404(.....) джанго имеет функцию, пот которой она извлечёт объект (ребята именно объект не больше) и этот объект должен быть именно http, если она его не найдёт, то вернёт исключение 404, в жизни -страницы не существует.

Я не зря сказал про объект. Ведь джанго не знает. что это статья, первая страница, видео, аудио, пдф документ, да что угодно.

Что делать. Разделить вашу логику и то что делает джанго.

Но ведь это просто, как с бочкой капусты. Ведь кирпич, ничего не знает о капусте и что он будет наживать крышку капусты, но это хорошо знаем мы и этот метод

get_object_or_404(.....), абсолютно идентичен, что вы пойдёте в сарай и возьмете кирпич, джанго пойдёт в базу и возьмёт запись с кокнретной модели.

И вы мне будете песни петь. что вы никогда не размышляли, как программист. Сами, то видите, что размышляли и не раз.

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

На каком этапе возникает путаница именно в книгах и материалах интернета. которые перепечатаны друг у дура.

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

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

Новичок пыхтит, пишет в полусне и потом вдруг бац и заработало, громкий выдох(это я про себя лет 12 назад пишу), работает.

И, все попал парень в круг и потом годами из него не может выйти, все программирование начинает заключаться в поиске чего-то похожего.

Узнаете кто себя?

А как разорвать этот круг, понять, что отдельно программист и отдельно код языка и код фреймворка(любого)

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

Когда в книге идёт объяснение, что вот то-то и то-то происходит, но не объясняется, что происходит и должно происходить в голове программиста, то для новичка и получается. что вбивается мысль, что джанго умеет все и делает магически блог.

С этой статьи вы видите, что мы делаем блог, а джанго умеет только делать действия.

ещё раз посмотрите на пример

get_object_or_404(.....) джанго имеет функцию, пот которой она извлечёт объект (ребята именно объект не больше) и этот объект должен быть именно http, если она его не найдёт, то вернёт исключение 404, в жизни -страницы не существует.

Давайте фишку проваливать у вас в голове.

Отвечайте сейчас на мои вопросы:

Что умеет делать Джанго в этой конкретной функции? Ваш ход. (не забудьте назвать это объектом)

Проверка понимания. Так все таки Джанго делает что когда вы применяете get_object_or_404(.....) . Она знает что вы задумали написать лайки? Ваш ход.

Или она просто извлекает объект, потому что просто умеет это делать именно эта функция? Ваш ход.

Ну не умерли от страха. Видите не все так страшно. а просто на самом деле.

Теперь к реальным ребятам перейдём.(это рассказать отдельно - для себя написал)

Кстати , сейчас занимаются ребята, imka(дима), keplerde(денис) swaytornado(дима) - все эти ребята сейчас должны решить этот вопрос и мы скоро увидим, их как рванет вперёд.

Приколько это наблюдать. Вы что думаете я зря дал задание imka научится применять параметры функций, не зря.

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

прочтите.

Здесь в видео рассказать о прорыве Дмитрия imka.

Как я начал код писать в Python. Смотрите, если уперлись и ничего не получается. (вообще это видео, в описании ссылка на статьи полные)

Где возникает проблема и сразу же заливается бетоном в головах. Почему ребята, с нуля, которые либо посещают курсы, и там пишут приложение на Джанго или читают книги и так пишут сове первое приложение. В таком случае новичок не видит своей роли в этом процессе кроме повторения, соответственно он не может понять, как это работает, так как он настроен повторять, а его нужно учить разрабатывать. то есть отделить свою логику от того что умеет язык. фреймворк, библиотека.

Тогда все становится на свои места:

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

Но Джанго имеет методы и функции, которые выполняют определённую работу и задача разработчика подобрать эти методы к своему замыслу.

Как в нашем примере. Что бы лайкнуть нужно сначала извлесь запись, что бы эта запись появилась ранее мы создали модель, по которой джанго создала таблицы в базе данных, мы одну из этих таблиц написали пост(ручками), и когда нам понадобилось написать лайки, мы про себя подумали. нам нужно эту самую статью, как то извлечь из базы и показать пользователю, ведь верно, иначе что он будет лайкать.

Так как мы точно понимаем, что хотим сделать и изучаем Джанго по методике Бовсуновского(а у меня пишут все и это не праздные слова и не выпендрёшь), то мы вспоминаем. что у Джанго есть функция, которая умеет извлечь объект. (именно объект, ведь на месте статьи может быть что угодно, видео, документа, переписка в чате и т .д)

мы заходим в доки

https://docs.djangoproject.com/en/4.1/topics/http/shortcuts/

что мы определяем по взгляду:

get_object_or_404(klass, *args, **kwargs)

это функция (мы учислись в школе Бовсуновского хорошо и уже давно прошли параметры и легко их видим, в том числе конечно и в документации.)

Читаем. по названию get_object_or_404 и описанию.

Запрос get()на заданном менеджере моделей, но это поднимает Http404вместо модели DoesNotExistисключение.

Ах он этот get(), отвлечёмся.

ведь мы уже видели какой-то get ранее

вот в начале id=request.POST.get('id'), полный пример

post = get_object_or_404(Post, id=request.POST.get('id'))

В документации говорится о get(), для get_object_or_404(), каким образом извлекаются данные, (то есть выборка объектов )

строка 605, то есть этот метод класса

class QuerySet(AltersData): строка 290.

https://github.com/django/django/blob/main/django/db/models/query.py

в то время то что внутри мы пишем

id=request.POST.get('id'), здесь get() метод словаря, ранее говорили почему

https://docs.python.org/3/library/stdtypes.html#dict.get

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

смотрите видео и увидите:

https://spb-tut.ru/programming_school/python-programming-video/

Продолжим, ведь мы отвлекались.

В данном случаем, нам ничего не нужно придумывать. так как в джанго есть заготовка:

get_object_or_404(klass, *args, **kwargs)

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

https://docs.djangoproject.com/en/4.1/ref/models/querysets/#django.db.models.query.QuerySet.get

(мы просто это знаем и вы теперь). Теперь понимаете почему я говорю. что нужно разобраться с параметрами функций

(https://spb-tut.ru/%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB-%D1%81-%D0%BD%D1%83%D0%BB%D1%8F/%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8B/%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB-python-kotlin-js-%D1%81-%D0%BD%D1%83%D0%BB%D1%8F/function-how-to/category/function-how-to/)

Зачем разбираться с параметрами?

Что бы читать документацию?

Что бы размышлять ими?

Что бы знать, что можно передавать, что нет.

Что нужно было понять до этого момента, только одно. Что есть Вы, программист и логика у Вас в голове. И есть язык и его фреймворки, там есть методы, которые делают полезную работу.

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

get_object_or_404(klass, *args, **kwargs)

, так как он отвечает нашим требованиям, а наше требование извлечь из базы статью.

Нам для этого нужно указать наш класс и дальше то что нам нужно, так как мы далее читаем

get_object_or_404(klass, *args, **kwargs)

любые позиционные и именованные аргументы, а это как раз и есть именованный аргумент. (я говорил. что функции нужно затереть до дыр, идите трите)

id=request.POST.get('id'))

И здесь нет никакой магии, все очевидно(для учатников школы Бовсуновского и кто все же занимается по системе и начал джанго с нуля

https://spb-tut.ru/%D1%83%D1%80%D0%BE%D0%BA%D0%B8-django-4/%D0%B2%D1%85%D0%BE%D0%B4%D0%B8%D0%BC-%D0%B2-django-4/

разберём, что происходит, как не запутаться во всем этом (здесь должны быть отработаны знания работы с атрибутами классов питон и общее знание классов)

сама функция get, по шаблону которой работает

get_object_or_404()

просто выполняет алгоритм поиска по полям: по тупому принципу

https://docs.djangoproject.com/en/4.1/ref/models/querysets/#field-lookups

Entry.objects.get(id__exact=14)

Entry модель в нашем случае Post называется модель.

objects - стандартная утилита Джанго, которая просто умеет искать поля и выбирать

id__exact=14 - пример выбора записи по конкретному номеру записи.

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

id=request.POST.get('id'), полный пример

post = get_object_or_404(Post, id=request.POST.get('id'))

Мы это уже обсуждали выше.

так что путаться то не в чём.

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


Остальной кусок кода.
# не понравилось
liked = False
if post.likes_post.filter(id=request.user.id).exists():
post.likes_post.remove(request.user)
liked = False

Вы уже должны быть немного с опытом. понаторели по ходу чтения:

Спрашиваю.

что такое liked именно смысл Джанго знает? Ваш ход.

Ничего она не знает и никто не знает кроме нас с вами.

Вы спросите вопрос,а как же Джанго узнает, что нужно поставить отметку нравится или не нравится.

Да ничего он не будет знать.

Так а кто будет знать? Ваш ход.

Ни джанго ни написанная нами функция не будет знать, когда что-то нравится или что-то не нравится.

Но мы точно можем знать. что хотим.

Далее с участниками будем делать и уже делали.

Мы создадим .html файл и создадим форму, помните мы указывали в функции, что нам нужен POST запрос.

id=request.POST.get('id')

Так вот смотрите:

кстати тег формы к джанго не имеет отношения это вам нужно набрать html5 гипертектовая разметка.

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

Если ещё раз кликнул значит не нравится.

<form>

1 положение

if вот здесь будет наша переменная liked = False (которую мы превратим в контекст, то что будет понимать шаблон Джанго.

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

liked = False, то есть сердечко белое.

белое сердечко

else 2 положение нравится.

красное сердечко.

</form>

что нам осталось сделать, так в эту форму разместить две иконки, одну белое сердечко, другую красное сердечко.

Сложно?

Так, что в данном случае Джанго знает о нашем замысле? Ваш ход.

Теперь мы будем подбирать в Джанго методы, которые нам нужны.

нам нужно две операции в целом.

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

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

Дальше все просто.

if post.likes_post.filter(id=request.user.id).exists():
post.likes_post.remove(request.user)
liked = False

Строка

if post.likes_post.filter(id=request.user.id).exists():

обычное ветвление, как в случае с капустой, снять кирпич, положить на курышку.

Только в Джанго ведь мы делали блок, не забыли.

  1. post - это наша переменная, которая извлечёт статью нужную нам.
  2. likes_post - это поле нашей модели Post(есть в уроках в школе, здесь не поясняю, что бы не путать)
  3. но для представления анатомию модели джанго можете прочитать сейчас в моей группе в vk
  4. vk.com/@django_spb_tut-anatomiya-modeli-v-django-4
  5. далее обычная выборка с модели, есть в джанго модель, которая умеет выбирать разными способами, эти способы называются методами класса QuerySet(мы уже о нём говорили)
  6. filter() https://docs.djangoproject.com/en/4.1/ref/models/querysets/#filter
  7. Возвращает новый QuerySetсодержащие объекты, соответствующие заданному поиску параметры.
  8. А в поиске мы задаём id=request.user.id - id пользователя. Что бы определить, кто кликает по картинке.
  9. сами найдите exists(). То есть найти кровь с носу.

ранее мы точно поределили пользователя, Далее все просто, мы точно знаем, что нам нужно удалить запись,

вот и добавляем.

нашу переменную post(все как ранее)

указываем таблицу модели.

и стандартный метод Джанго, который умеет удалять remove()

https://docs.djangoproject.com/en/4.1/ref/models/relations/#django.db.models.fields.related.RelatedManager.remove

post.likes_post.remove(request.user)
liked = False

likes_post = models.ManyToManyField(
User, related_name='post_likes', blank=True, verbose_name='Лайки')

Соотвественно далее мы напишем с участниками ещё один кусок кода, где нужно будет добавить.

Нам осталось ещё немного, для полного понимания.

А именно, зачем нам Ajax.

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

В данном случае будем делать с Jquery.

Js будем учить работать с питон.

Js это совсем тупое создание, так что короткий поводок.

Но есть умное создание Jquery

нам нужно написать функцию по шаблону и разместить код в html, здесь не буду перегружать. а расскажу суть, будет больше пользы.

Что нам нужно от JS, нам нужна одна вещь,

  1. Передать данные на сервер, без перезагрузки страницы. как раз это и делает ajax.
  2. нам нужно что бы все срабатывало только по клику в определённом месте, то есть по клику по картинке сердечка.
  3. Нет ничего сложного, нам нужно грубо говоря придумать любое слово понятное нам, разместить это слово на странице, где картинка и сказать js что передовать данные сервер, только если кликают внутри этого слова (вернее тега)
  4. вот как это выглядит. like-section это и есть то слово, которое мы придумали и заключили в тег <div> и как вы видите внутри есть файл, а все просто, ранее мы создавали файл с картинками, мы его просто импортируем в страницу. которая показывает саму статью и вставляем под постом.
  5. <div id="like-section">
    {% include 'blog/like_section.html' %}
    </div>
  6. Далее нам просто нужно описать условия для ajax, указать нашу форму, указать, что ждать и пока не кликнет человек ничего не делать.....все это в уроках

http://api.jquery.com/jquery.ajax/

  1. Остался последний вопрос, как будут взаимодейтсвовать Python и JS, через json

Здесь нет проблем.

JS будет работать так как он умеет используя свои типы данных, а питон, вернее Джанго,

заберёт эти данные, при помощи загатовленного ранее метода JsonResponse(), который есть в джанго и он умеет переводить данные. которые в формате json в типы данных питон.

нам просто нужно добавить в нашу функции такой код.

if request.is_ajax():
html = render_to_string('blog/like_section.html',
context,
request=request)

Примечание. В джанго 4 убрали метод is_ajax(), но все же я считаю. что Jquery недооцененная библиотека, и я решил написать middleware, который вернул Джанго эту функцию.

Мы будем делать и другими способами, но я подумал. пусть у ребят будет и этот способ, он очень простой и пишется в пару строк.

middleware, что это и как работает рассказал здесь, точно уловите принцип

https://www.youtube.com/watch?v=UtUcrvT0AAg&list=PLuZJ9n46uMzUJrTZSCrDB126PgGzIRH0e&index=1&t=2990s

Нам осталось понять. как этот весь механизм запуститься.

по url

когда пользователь попадёт на url неважно как, по ссылке, с поиска и т .д

сначала откроется по ссылке сама статья блога

path('post/<int:pk>/', views.post_detail_view, name='post-detail'),

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

path('post/like/', views.like_post, name='post-like'),

как видите есть наша функция

views.like_post. при наборе url она сработает

Ну и стоит обратить внимание на начало функции:

def save_post(request):

видите request здесь об этом говорил

https://www.youtube.com/playlist?list=PLuZJ9n46uMzUJrTZSCrDB126PgGzIRH0e

Что нужно знать джанго о сервере она сама извлечёт при помощи HttpRequest.(загаловок, адрес, куки и т .д все что необходимо знать о странице, для нормальной работы)

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

Мой вопрос. Кто знает логику? ваш ход.



Как я начала программировать добавить статью:

Посмотрите видео в описании есть ссылки на статью и прочтите больше будете понимать и быстрее начнёте писать:

https://www.youtube.com/watch?v=jcf5eYKycJs&t=604s

Рекомендуется оценить мощь. Обязательно глянь подборку видео, как растут ребята, у тебя тоже получится.

Подборка видео, для прорыва в мозгах, изменит подход к изучению программирования.

https://spb-tut.ru/programming_school/python-programming-video/

здесь с ребятам я занимаюсь бесплатно в группе, направляю, кто хочет. все получается. Ведь какая проблема у новичка, он не знает на что уделить внимание, что бы программировать, а у меня на этом построена школа, то есть школа может быть полезна, даже если вы где-то учитесь, просто увеличите эффективность. когда будете понимать. как изучать программирование и язык не имеет значения.

что мне делать?

Купите доступ и учитесь, все получится. сами убедились, что действия, как в программировании вы делаете каждый день, так в чём проблема.

Только в одном. К программированию нужно подходить особым образом, вы уже наверное смотрели, что это значит и как:

https://www.youtube.com/watch?v=jcf5eYKycJs&t=604s

Купить.

Джанго + Питон:

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/

Все получится точно.

Перейти к уроку

40. Продолжаем писать else для представления лайков like_post().

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

Перейти к уроку

41. До конца допишем like_post(), а именно context, json, return.

Ну что ж это нам знакомо, давайте допишем

like_post(), а именно

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

json - напишем json, помните мы с вами делали middleware, а именно is_ajax().

Примечание. В Джанго 4 убрали эту функцию и предложили писать чистым js, успеем мы ещё написать на чистом js, поэтому я решил, что бы не стала забвением библиотека JQuery, вещь хорошая, много над ней работают, поэтому я решил написать middleware и опять оживить метод is_ajax(), если помните, то там мы использовали метод

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

return - принимаем решение, что вернуть.

Перейти к уроку