Продвинутое понимание базовой сути Django

В какой-то момент. Работая над возможностью применения динамического url pattern. А именно задавать через базу данных. соответствия.
request.path и функцией

Я вдруг в какой то момент осознал что собой представляет Джанго на другом уровне понимания.

Наверное это можно назвать экспертный (или продвинутый )уровень понимания.

Опишу постепенный процесс как этому пришел.





Что пишут для для нубов Джанго.

Джанго реализуют MTV паттерн.
Модель Template Views (похоже на MVC)  ... модели шаблоны вьюхи  ....
все остальное в официальной документации. или в книгах типа http://djbook.ru
там много чего, что описывает всякие технические детали. и которые очень важны и полезны.

я не знаю. поймет ли человек не видя той документации понять что я скажу ниже.

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

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

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

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

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

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

Базовое:
  1. модели вместе с orm
  2. шаблоны
  3. views - это просто функции питона с обязательным параметром request.
  4. понятие проекта и приложения.
  5. url pattern

Не базовое:
Админка, авторизация, rss, кэширование , middleware, формы.... бесконечно

Теперь помашем бритвой Оккама отрежем все не необходимое

Рассмотрим следующие базовые вещи джанги.

Модели, views и шаблоны
это соответственно :
Структура Данных, обработка и вывод.

казалось бы это и есть суть джанги.

Но нет это суть вообще почти любой программы.

МОДЕЛИ
взята концепция из ruby on rails удобны их надо использовать.

это даже не сами данные а интерфейс работы с данными.

Но можно все и напрямую и
данные могут быть любыми: файлы, xml, возможно так же использовать прямой sql

Модели это просто одна из возможностей

Можно убрать.

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


ШАБЛОНЫ
Для читабельности кода. и разделения кода от представления. Очень важна.

Но в данный момент я её убираю. Поскольку все таки шаблоны не являются необходимыми.
можно и так сделать вывод.


URL PATTERN (urls.py)
прописаны соответсветсия.
request.path и вызываемой функции.
необходимая вещь.


ПРОЕКТ И ПРИЛОЖЕНИЕ

ПРОЕКТ
необходимое базовое понятие. это главный службеный модуль. откуда идет запуск уже прикладных модулей (приложений). в одной области памяти один проект и один settings.py

нужен для организации модульности.

Файлы создаваемые по умолчанию
__init__.py,
manage.py,
settings.py,
urls.py

Рассмотрим settings.py

Здесь находятся настройки проекта.

в том числе имена подключаемых приложений
в параметре ROOT_URLCONF имя главного файла url patterns
по умолчанию это urls по которому в первую очередь ищутся соответствия функции и request.path.
корневой файл с паттернами уже рекурсивно может подключать другие url pattern.

то есть начало начал именно settings.py поскольку settings.py определяет корневой(главный) urls.py а то в свою очередь второстепенные urls.py.

Фиксированные имена файлов в проекте и приложениях только у
__init__.py, manage.py и settings.py
то есть файлы где хранятся модели, url patterns, views могут иметь произвольные названия. хотя конечно есть рекомендованные.

поскольку это просто обычные модули питона.

ПРИЛОЖЕНИЕ
для модульности софта очень важный инструмент. но по сути это модуль питона. Приложений может быть много в одном проекте. Более того одно приложение может использоваться в разных проектах.


ИТАК работающий проект джанги может состоять из пользовательского файла
urls.py

и служебных файлов проекта
__init__.py - требование питона
manage.py - запуск команд
settings.py

минимизировав все открывается сущность джанги
что она лежит в urls.py
то есть в url mapping

url mapping это нахождения в массиве соответсвия
request.path
c
именем модуля , названия функции с соответсвущими параметрами.

request.path => name_module,name_function(request, *args, **kwargs)

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


получаем что суть джанги

1. Это подготовка объекта request. (request это параметры запроса)
2. В соответствии с url patterns находится соответствие request.path и
имени модуля, названия функции с соответствующими параметрами
3. Вызов функции как минимум с одним параметром request.
4. функция должна вернуть объект response. Но это также можно сделать без джанги.


Т.е. Суть джанги это не MVT (MVC) а URL MAPPING

то есть проведения простого или сложного соответствия между url и функцией

все остальное тоже очень важно и полезно. но это тема отдельного разговора.

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

Пример простейшего проекта.
из консоли
django-admin.py startproject test
заходим в проект
заменяем urls.py  этим кодом добавилось пару строк функция test и строчка в url pattern соответствия hello
from django.conf.urls.defaults import *

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

from django.http import HttpResponse

def hello(request):
 return HttpResponse (' hello world')

urlpatterns = patterns('',
  # Example:
  # (r'^test3/', include('test3.foo.urls')),

  # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
  # to INSTALLED_APPS to enable admin documentation:
  # (r'^admin/doc/', include('django.contrib.admindocs.urls')),

  # Uncomment the next line to enable the admin:
  # (r'^admin/', include(admin.site.urls)),
  (r'hello/', hello)
)

* This source code was highlighted with Source Code Highlighter.
В браузере
http://localhost:8000/hello/

P.S. в каком то смысле джанго напоминает простой веб-сервер.
она может взять почти все его функции на себя. и собственно и берет как в случае тестового сервера.
а суть веб-сервера. это url маппинг. и в соответствии с правилами мэппинга делать какие то действия .

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

Обо мне

Не бот, но человек.

Счетчик