Практически любой интернет ресурс работает на принципе запрос-ответ, наша задача, как програмистов, правильно описывать логику того, что должно присходить при определенном запросе.
Используется для запроса содержимого указанного ресурса. Например получить данные, файл или любую другую информацию, браузер (Chrome, Mozzila, etc.) при наборе url (https://ru.wikipedia.org/, https://www.youtube.com/watch?v-WdZJ-QUItHw&t-7974s) использует имеено GET запрос, может передавать переменные в квери параметре (в примере с ютубом ?v-WdZJ-QUItHw&t-7974s это квери парметры, начинается с символа ?, следующий парметр добавляется при помощи символа & в данном примере, параметр {'v': 'WdZJ-QUItHw', 't': '7974s'})
Обычно не используется для отправки данных, только для получения определенной информации. Например получение коментариев к посту в блоге.
Применяется для передачи пользовательских данных заданному ресурсу. Например, в блогах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом POST и он помещает их на страницу. При этом передаваемые данные (в примере с блогами — текст комментария) включаются в тело запроса. Аналогично с помощью метода POST обычно загружаются файлы на сервер. Может содержать много данных или файлов (или и то и другое).
Применяется для обновления данных по заданному ресурсу целиком, например, изменение коментария. Может содержать много данных или файлов (или и то и другое).
Почти аналогичен методу PUT, но применяется для частичного изменения объекта. Допустим изменения данных в профиле в соц сети, при изменении имейла, нам не нужно изменять весь профиль, только поле имейл. Может содержать много данных или файлов (или и то и другое).
Используется для удаления объектов, обычно не принимает данные как и метод гет. Пример, все тот же коментарий.
Сущетвуют и другие запросы, которые используют реже и с другими назначениями, их и более подробно эти запросы, мы рассмотрим на другом занятии.
Описанные запросы используют, для стандарных CRUD операций, Create - POST, Retrieve - GET, Update - PUT/PATCH, Delete - DELETE
Для разработки любых сложных решений используются шаблоны проектирования.
Для нас,в данный момент, самым важных из них является MVC (Model - View - Controller) (Модель - Отображение - Контроллер)
Что же это такое?
Это разделение обязанностей между тремя зависимыми блоками.
Представте себе работу ресторана.
Моделью в таком примере является склад продуктов, на нем есть определнные продукты, но сами по себе они не меняются, без внешнего воздействия.
Отображением будет блюдо, вы как клиент (пользователь) можете прийти и заказать себе еду, но вы понятия не имеете какие именно продукты есть сейчас на складе, и можете только догадываться как именно эти продукты будут обрабатываться.
Контроллер, в этом случае, это персонал ресторана, принимают заказы, смотрят могут ли они их выполнить, обрабатывают продукты и подают за стол. и если нужно заказывают еще продукты.
По этому же принципу работает и Django, но в немного измененной, только по терминам форме, паттерн называется MVT (Model - View - Template), где View играет роль контроллера, а Template роль отображения, но суть при этом сохраняется.
Django - веб-фреймворк, а фреймворк это по своей сути конструктор, который помогает нам собирать блоки, часто даже не задумываясь как именно это работает под капотом.
Основной информационный ресурс Django
Создадим новый проект, для этого, создадим новое виртуальное окружение, и установим туда Django
pip install django==2.2django-admin startproject mysiteЭта команда создаёт новый проект, и заполняет его базово нужными файлами, давайте рассмотрим их.
Структура файлов:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.pymanage.py - файл-утилка при помощи которого мы будем взаимодействовать со многими частями Django из консоли
Внитри папки mysite:
__init__.py - Пустой файл, который говорит Python-у, что этот каталог должен рассматриваться как пакет Python-а
settings.py - Настройки и конфигурации проекта.
urls.py - URL-ы для этого проекта; «оглавление» вашего сайта на платформе Django.
wsgi.py - Файл отвечающий за входную точку сервера (Позволяет запускать код как сайт)
Проверим работоспособность.
В консоли запустим локальный "сервер" из папки с нашим "сайтом" (в моём примере mysite)
python manage.py runserverВ консоли должна появиться примерно такая надпись.
Не закрывая консоль (сервер должен работать), открываем в браузере http://127.0.0.1:8000/
127.0.0.1 это локальный хост а :8000 это номер порта на котором запущен процесс. 127.0.0.1 можно заменить на 0.0.0.0 или слово localhost, все три варианта взаимозаменяемы.
Если вы всё сделали правильно, то в бразузере должны увидете, что то такое:
Настройки и конфигурации это замечательно, но правильная архитектура приложения, подразумевает использование отдельных модулей как части сайта (бывает один на весь сайт, а бывают и тысячи), такие модули называются приложениями, и именно в них пишется "суть" сайта.
Через консоль, и уже известную нам manage.py создадим приложение
python manage.py startapp myappКоманда создаст вам папку с вашим приложением, давайте разберем её подробнее
myapp/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py__init__.py - Пустой файл, который говорит Python-у, что этот каталог должен рассматриваться как пакет Python-а
admin.py - заготовка под админку
apps.py - информация о приложении (нужно при большом коле-ве приложений, для удобства)
папка migrations - Тут будут миграции базы данных.
models.py - Модели.
tests.py - Тесты.
views.py - Контроллер приложения.
Для начала изменим файл views.py
from django.http import HttpResponse
def first(request):
return HttpResponse("Hey! It's your first view!!")Для работы нашего приложения, создаём дополнительный файл в папке с приложением и назовем его urls.py
myapp/urls.py
from django.urls import path
from .views import first
urlpatterns - [
path('', first, name='index'),
]В файле с урлами создадим ссылку на урлы приложения
mysite/urls.py
from django.urls import include, path
urlpatterns - [
path('my_url/', include('myapp.urls')),
]Теперь откроем наш "сайт" и введем в адресную строку http://127.0.0.1:8000/my_url/
Роутинг можно строить так как вам удобно, или как того требует задание.
Напишем еще один путь, для "главной" страницы. В файле myapp/views.py
def index(request):
return HttpResponse("It's index page!!")А в файле mysite/urls.py импортируем эту функции и добавим маршрут в список, что бы получилось так:
from django.urls import include, path
from myapp.views import index
urlpatterns = [
path('my_url/', include('myapp.urls')),
path('', index, name='index')
]Открываем главную страницу и видим результат.
Урл может заведомо принимать параметры, самый простой способ, это описание парметра через синтаксис <type:variable>
Обновим наш urls.py:
from django.urls import include, path
from myapp.views import index, main_article, uniq_article, article
urlpatterns = [
path('my_url/', include('myapp.urls')),
path('', index, name='index'),
path('article/', main_article, name='mail_article'),
path('article/33/', uniq_article, name='uniq_article'),
path('article/<int:article_id>/', article, name='article'),
path('article/<int:article_id>/<slug:name>', article, name='article_name'),
]И добавим к myapp/views.py:
def main_article(request):
return HttpResponse('There will be a list with articles')
def uniq_article(request):
return HttpResponse('This is uniq answer for uniq value')
def article(request, article_id, name=''):
return HttpResponse(
"This is an article #{}. {}".format(article_id, "Name of this article is {}".format(
name) if name else "This is unnamed article"))Давайте разбереме подробнее.
Мы описали два статических урла article/ и article/33
и два динамических article/<int:article_id>/ и article/<int:article_id>/<slug:name>
причём в качестве обработика динамических урлов, мы указали одну и туже функцию article, в которой указали что будет приниматься два параметра article_id и name, и при этом name не является обязательным, т.к. имеет значение по умолчанию.
Давайте посмотрим на результат.
Последнее это пример работы если урл не был описан (Всем известная страница 404, в дебаг режиме, она может рассказать много подробностей об ошибке)
Бывают варианты, когда нужно применять более сложные структуры урлов, и для их обработки нам поможет огромное кол-во вспомогательных методов и классом, или регулярные выражения.
Рассмотрите их самостоятельно по Вот Этой Ссылке
-
Создать новый прокт и новое приложение
-
Создать в нём всю необходимую структуру, для урлов
http://127.0.0.1:8000/,http://127.0.0.1:8000/acricles,http://127.0.0.1:8000/acrticles/archive,http://127.0.0.1:8000/users -
Создать структуру для динамических урлов:
http://127.0.0.1:8000/article/<int:article_number>,http://127.0.0.1:8000/http://127.0.0.1:8000/article/<int:article_number>/archiveиhttp://127.0.0.1:8000/users/<int:user_number>
Возвращать урлы, могут, всё что угодно, главное, что бы они работали!!!












