{"title":"Django w skrócie","version":"2.1","locale":"pl","docname":"intro/overview","url":"/pl/2.1/intro/overview/","canonical":"https://djangodocs.dev/pl/2.1/intro/overview/","summary":"Jako że Django było rozwijane w dynamicznym środowisku prasowego newsroomu, zostało zaprojektowane w taki sposób, aby robić częste web-deweloperskie zadania szybko…","html":"<h1>Django w skrócie<a class=\"heading-anchor\" href=\"#django-at-a-glance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Jako że Django było rozwijane w dynamicznym środowisku prasowego newsroomu, zostało zaprojektowane w taki sposób, aby robić częste web-deweloperskie zadania szybko i prosto. Poniżej przedstawiamy nieformalny opis jak napisać opartą na bazie danych aplikację webową z Django.</p>\n<p>Celem tego dokumentu jest prezentacja takiej ilości technicznej specyfiki, abyś zrozumiał jak Django działa, ale nie jest on przeznaczony do bycia tutorialem lub dokumentacją – mamy ich oboje! Kiedy będziesz gotowy, aby zacząć projekt, możesz <a class=\"reference internal\" href=\"/pl/2.1/intro/tutorial01/\"><span class=\"doc\">rozpocząć tutorial</span></a> lub <a class=\"reference internal\" href=\"/pl/2.1/topics/\"><span class=\"doc\">zanurzyć się w bardziej szczegółowej dokumentacji</span></a>.</p>\n<section id=\"design-your-model\">\n<h2>Zaprojektuj swój model<a class=\"heading-anchor\" href=\"#design-your-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Pomimo że możesz używać Django bez bazy danych, ma on wbudowany <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Object-relational_mapping\">mapper obiektowo-relacyjny</a>, za pomocą którego możesz opisać układ swojej bazy danych pythonowym kodem.</p>\n<p><a class=\"reference internal\" href=\"/pl/2.1/topics/db/models/\"><span class=\"doc\">Składnia modeli danych</span></a> oferuje wiele bogatych sposobów przedstawiania modeli – do tej pory było to rozwiązywanie trwających wiele lat problemów schematu bazy danych. Oto krótki przykład:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">mysite/news/models.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Reporter</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">full_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">70</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">full_name</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">content</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">reporter</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Reporter</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">headline</span>\n</code></pre></figure>\n</section>\n<section id=\"install-it\">\n<h2>Zainstaluj<a class=\"heading-anchor\" href=\"#install-it\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Następnie uruchom narzędzie linii poleceń Django, aby automatycznie stworzyć tabele w bazie danych:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>migrate\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py migrate\n</code></pre></div></div></div>\n<p>Komenda <a class=\"reference internal\" href=\"/pl/2.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> spogląda na wszystkie dostępne modele i tworzy tabele w bazie danych, jeśli jeszcze nie istnieją, oraz opcjonalnie daje wiele bogatszą kontrolę nad schematem &lt;/topics/migrations&gt;.</p>\n</section>\n<section id=\"enjoy-the-free-api\">\n<h2>Ciesz się wolnym API<a class=\"heading-anchor\" href=\"#enjoy-the-free-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Przez wolne i bogate <a class=\"reference internal\" href=\"/pl/2.1/topics/db/queries/\"><span class=\"doc\">pythonowe API</span></a> masz dostęp do swoich danych. API jest tworzone w locie, nie wymaga generowania kodu:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"c1\"># Import the models we created from our &quot;news&quot; app</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">news.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span><span class=\"p\">,</span> <span class=\"n\">Reporter</span>\n\n<span class=\"c1\"># No reporters are in the system yet.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"o\">&lt;</span><span class=\"n\">QuerySet</span> <span class=\"p\">[]</span><span class=\"o\">&gt;</span>\n\n<span class=\"c1\"># Create a new Reporter.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">Reporter</span><span class=\"p\">(</span><span class=\"n\">full_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;John Smith&#39;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Save the object into the database. You have to call save() explicitly.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"c1\"># Now it has an ID.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">id</span>\n<span class=\"mi\">1</span>\n\n<span class=\"c1\"># Now the new reporter is in the database.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"o\">&lt;</span><span class=\"n\">QuerySet</span> <span class=\"p\">[</span><span class=\"o\">&lt;</span><span class=\"n\">Reporter</span><span class=\"p\">:</span> <span class=\"n\">John</span> <span class=\"n\">Smith</span><span class=\"o\">&gt;</span><span class=\"p\">]</span><span class=\"o\">&gt;</span>\n\n<span class=\"c1\"># Fields are represented as attributes on the Python object.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">full_name</span>\n<span class=\"s1\">&#39;John Smith&#39;</span>\n\n<span class=\"c1\"># Django provides a rich database lookup API.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"o\">&lt;</span><span class=\"n\">Reporter</span><span class=\"p\">:</span> <span class=\"n\">John</span> <span class=\"n\">Smith</span><span class=\"o\">&gt;</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">full_name__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">)</span>\n<span class=\"o\">&lt;</span><span class=\"n\">Reporter</span><span class=\"p\">:</span> <span class=\"n\">John</span> <span class=\"n\">Smith</span><span class=\"o\">&gt;</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">full_name__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;mith&#39;</span><span class=\"p\">)</span>\n<span class=\"o\">&lt;</span><span class=\"n\">Reporter</span><span class=\"p\">:</span> <span class=\"n\">John</span> <span class=\"n\">Smith</span><span class=\"o\">&gt;</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">Traceback</span> <span class=\"p\">(</span><span class=\"n\">most</span> <span class=\"n\">recent</span> <span class=\"n\">call</span> <span class=\"n\">last</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n<span class=\"n\">DoesNotExist</span><span class=\"p\">:</span> <span class=\"n\">Reporter</span> <span class=\"n\">matching</span> <span class=\"n\">query</span> <span class=\"n\">does</span> <span class=\"ow\">not</span> <span class=\"n\">exist</span><span class=\"o\">.</span>\n\n<span class=\"c1\"># Create an article.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">Article</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">(),</span> <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s1\">&#39;Django is cool&#39;</span><span class=\"p\">,</span>\n<span class=\"o\">...</span>     <span class=\"n\">content</span><span class=\"o\">=</span><span class=\"s1\">&#39;Yeah.&#39;</span><span class=\"p\">,</span> <span class=\"n\">reporter</span><span class=\"o\">=</span><span class=\"n\">r</span><span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"c1\"># Now the article is in the database.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"o\">&lt;</span><span class=\"n\">QuerySet</span> <span class=\"p\">[</span><span class=\"o\">&lt;</span><span class=\"n\">Article</span><span class=\"p\">:</span> <span class=\"n\">Django</span> <span class=\"ow\">is</span> <span class=\"n\">cool</span><span class=\"o\">&gt;</span><span class=\"p\">]</span><span class=\"o\">&gt;</span>\n\n<span class=\"c1\"># Article objects get API access to related Reporter objects.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">reporter</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">full_name</span>\n<span class=\"s1\">&#39;John Smith&#39;</span>\n\n<span class=\"c1\"># And vice versa: Reporter objects get API access to Article objects.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">article_set</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"o\">&lt;</span><span class=\"n\">QuerySet</span> <span class=\"p\">[</span><span class=\"o\">&lt;</span><span class=\"n\">Article</span><span class=\"p\">:</span> <span class=\"n\">Django</span> <span class=\"ow\">is</span> <span class=\"n\">cool</span><span class=\"o\">&gt;</span><span class=\"p\">]</span><span class=\"o\">&gt;</span>\n\n<span class=\"c1\"># The API follows relationships as far as you need, performing efficient</span>\n<span class=\"c1\"># JOINs for you behind the scenes.</span>\n<span class=\"c1\"># This finds all articles by a reporter whose name starts with &quot;John&quot;.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">reporter__full_name__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">)</span>\n<span class=\"o\">&lt;</span><span class=\"n\">QuerySet</span> <span class=\"p\">[</span><span class=\"o\">&lt;</span><span class=\"n\">Article</span><span class=\"p\">:</span> <span class=\"n\">Django</span> <span class=\"ow\">is</span> <span class=\"n\">cool</span><span class=\"o\">&gt;</span><span class=\"p\">]</span><span class=\"o\">&gt;</span>\n\n<span class=\"c1\"># Change an object by altering its attributes and calling save().</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">full_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Billy Goat&#39;</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"c1\"># Delete an object with delete().</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"a-dynamic-admin-interface-it-s-not-just-scaffolding-it-s-the-whole-house\">\n<h2>Dynamiczny interfejs administracyjny: to nie tylko rusztowanie – to cały dom<a class=\"heading-anchor\" href=\"#a-dynamic-admin-interface-it-s-not-just-scaffolding-it-s-the-whole-house\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Gdy twoje modele są już zdefiniowane, Django może automatycznie stworzyć profesjonalny, gotowy na produkcję <a class=\"reference internal\" href=\"/pl/2.1/ref/contrib/admin/\"><span class=\"doc\">interfejs administracyjny</span></a> – witrynę, która pozwala uwierzytelnionym użytkownikom dodawać, zmieniać i usuwać obiekty. Wystarczy tylko zarejestrować model w witrynie administracyjnej:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">mysite/news/models.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">content</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">reporter</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Reporter</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">mysite/news/admin.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Article</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Filozofia tutaj jest następująca: twoja strona jest edytowana przez obsługę, klienta lub może po prostu ciebie – i nie chcesz musieć tworzyć backendowych interfejsów tylko do zarządzania treścią.</p>\n<p>Jednym z typowych workflow w tworzeniu aplikacji Django jest stworzenie modelu i uruchomienie administracji tak szybko jak to możliwe, aby obsługa (lub klienci) mogli zacząć uzupełniać dane. Następnie, skupienie się na sposobie prezentacji tych danych odbiorcom.</p>\n</section>\n<section id=\"design-your-urls\">\n<h2>Zaprojektuj swoje URL-e<a class=\"heading-anchor\" href=\"#design-your-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Prosty, elegancki schemat URL-i jest ważnym detalem w wysokiej jakości aplikacji webowej. Django wspiera piękne projekty URL i nie dodaje żadnych wstawek do URL-i, typu <code class=\"docutils literal notranslate\"><span class=\"pre\">.php</span></code> lub <code class=\"docutils literal notranslate\"><span class=\"pre\">.asp</span></code>.</p>\n<p>Aby zaprojektować URL-e dla aplikacji, tworzysz moduł Pythona zwany <a class=\"reference internal\" href=\"/pl/2.1/topics/http/urls/\"><span class=\"doc\">URLconf</span></a>. Spis treści dla twojej aplikacji, zawiera proste mapowanie pomiędzy wzorcami URL i pythonowymi funkcjami callback. Pliki URLconf służą również do oddzielania URL-i z kodu Python.</p>\n<p>Tak mógłby wyglądać URLconf dla powyższego przykładu <code class=\"docutils literal notranslate\"><span class=\"pre\">Reporter</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">Article</span></code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">mysite/news/urls.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;articles/&lt;int:year&gt;/&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">year_archive</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;articles/&lt;int:year&gt;/&lt;int:month&gt;/&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">month_archive</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;articles/&lt;int:year&gt;/&lt;int:month&gt;/&lt;int:pk&gt;/&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">article_detail</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Kod powyżej mapuje ścieżki URL do pythonowych funkcji callback („widoków”). Ciągi znaków ścieżek używają parametrowych tagów, aby „zebrać” wartości z URL-i. Gdy użytkownik żąda strony, Django przelatuje przez wszystkie ścieżki, po kolei, i zatrzymuje się na pierwszej, która spełnia żądany URL. (Jeśli żadna z nich nie pasuje, Django wywołuje specjalny widok 404.) Działa to niesamowicie szybko, gdyż ścieżki są kompilowane do wyrażeń regularnych w czasie ładowania.</p>\n<p>Gdy któryś z wzorców URL pasuje, Django wywołuje podany widok, który jest pythonową funkcją. Każdy widok dostaje w parametrze obiekt „request” – który zawiera metadane żądania – i wartości zebrane we wzorcu.</p>\n<p>Na przykład, jeśli użytkownik zażądałby URL-a „/articles/2005/05/39323/”, Django wywołałoby funkcję <code class=\"docutils literal notranslate\"><span class=\"pre\">news.views.article_detail(request,</span> <span class=\"pre\">year=2005,</span> <span class=\"pre\">month=5,</span> <span class=\"pre\">pk=39323)</span></code>.</p>\n</section>\n<section id=\"write-your-views\">\n<h2>Napisz swoje widoki<a class=\"heading-anchor\" href=\"#write-your-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Każdy widok jest odpowiedzialny za zrobienie jednej z dwóch rzeczy: Zwrócenie obiektu <a class=\"reference internal\" href=\"/pl/2.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> zawierającego treść dla żądanej strony lub rzucenie wyjątku takiego jak <a class=\"reference internal\" href=\"/pl/2.1/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Http404</span></code></a>. Reszta zależy od ciebie.</p>\n<p>W ogólności, widok pobiera dane stosowne do parametrów, ładuje szablon i renderuje go z pobranymi danymi. Tutaj jest przykładowy widok dla <code class=\"docutils literal notranslate\"><span class=\"pre\">year_archive</span></code> z powyżej:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">mysite/news/views.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">year_archive</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">year</span><span class=\"p\">):</span>\n    <span class=\"n\">a_list</span> <span class=\"o\">=</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"n\">year</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;year&#39;</span><span class=\"p\">:</span> <span class=\"n\">year</span><span class=\"p\">,</span> <span class=\"s1\">&#39;article_list&#39;</span><span class=\"p\">:</span> <span class=\"n\">a_list</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;news/year_archive.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Ten przykład wykorzystuje <a class=\"reference internal\" href=\"/pl/2.1/topics/templates/\"><span class=\"doc\">system szablonów</span></a> Django, który ma kilka potężnych funkcji, ale stara się pozostać wystarczająco prosty w użyciu dla nie-programistów.</p>\n</section>\n<section id=\"design-your-templates\">\n<h2>Zaprojektuj swoje szablony<a class=\"heading-anchor\" href=\"#design-your-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Kod powyżej ładuje szablon <code class=\"docutils literal notranslate\"><span class=\"pre\">news/year_archive.html</span></code>.</p>\n<p>Django ma ścieżkę wyszukiwania szablonów, która pozwala ci minimalizować redundancję pomiędzy szablonami. W swoich ustawieniach Django podajesz listę katalogów do szukania w nich szablonów z <a class=\"reference internal\" href=\"/pl/2.1/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DIRS</span></code></a>. Jeśli szablon nie istnieje w pierwszym katalogu, sprawdzany jest drugi i tak dalej.</p>\n<p>Powiedzmy, że szablon <code class=\"docutils literal notranslate\"><span class=\"pre\">news/year_archive.html</span></code> został odnaleziony. Tak mógłby wyglądać:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">mysite/news/templates/news/year_archive.html</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>Articles for <span class=\"cp\">{{</span> <span class=\"nv\">year</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>Articles for <span class=\"cp\">{{</span> <span class=\"nv\">year</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">article</span> <span class=\"k\">in</span> <span class=\"nv\">article_list</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">article.headline</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>By <span class=\"cp\">{{</span> <span class=\"nv\">article.reporter.full_name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Published <span class=\"cp\">{{</span> <span class=\"nv\">article.pub_date</span><span class=\"o\">|</span><span class=\"nf\">date</span><span class=\"s2\">:&quot;F j, Y&quot;</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<p>Zmienne są otoczone podwójnymi nawiasami klamrowymi. <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">article.headline</span> <span class=\"pre\">}}</span></code> znaczy „wypisz wartość atrybutu »headline« artykułu”. Ale kropki nie są używane tylko do odwoływania się do atrybutów. Mogą one być odwołaniami do klucza w słowniku, do indeksu tablicy i wywołaniami funkcji.</p>\n<p>Zwróć uwagę, że <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">article.pub_date|date:&quot;F</span> <span class=\"pre\">j,</span> <span class=\"pre\">Y&quot;</span> <span class=\"pre\">}}</span></code> używa uniksowego „pipe” (znak „|”). Jest on nazywany filtrem szablonu i jest sposobem na przefiltrowanie wartości zmiennej. W tym przypadku filtr „date” formatuje pythonowy obiekt datetime do żądanego formatu (tak jak w funkcji „date” w PHP).</p>\n<p>Możesz układać w łańcuchy tyle filtrów, na ile masz ochotę. Możesz napisać <a class=\"reference internal\" href=\"/pl/2.1/howto/custom-template-tags/#howto-writing-custom-template-filters\"><span class=\"std std-ref\">własne filtry szablonów</span></a>, które uruchamiają pod spodem własny kod Pythona.</p>\n<p>I na koniec, Django wykorzystuje koncept „dziedziczenia szablonów”. To to co robi <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">&quot;base.html&quot;</span> <span class=\"pre\">%}</span></code>. To znaczy „najpierw załaduj szablon nazwany »base«, który definiuje zestaw bloków i wypełnij te bloki poniższymi blokami”. W skrócie, pozwoli to drastycznie wyciąć powtórzenia w szablonach: każdy szablon musi definiować tylko to, co jest dla niego unikalne.</p>\n<p>Tak może wyglądać szablon „base.html”, wliczając użycie <a class=\"reference internal\" href=\"/pl/2.1/howto/static-files/\"><span class=\"doc\">plików statycznych</span></a>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">mysite/templates/base.html</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">static</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">img</span> <span class=\"na\">src</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">static</span> <span class=\"s2\">&quot;images/sitelogo.png&quot;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span> <span class=\"na\">alt</span><span class=\"o\">=</span><span class=\"s\">&quot;Logo&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n</code></pre></figure>\n<p>Prostszymi słowami, definiuje on look-and-feel strony (z logiem strony) i zawiera „dziury” do wypełnienia przez szablony-dzieci. To powoduje, że redesign strony sprowadza się do zmiany w jednym pliku – szablonie bazowym.</p>\n<p>Pozwala ci także stworzyć wiele wersji strony, z różnymi szablonami bazowymi, w czasie gdy wykorzystujesz te same szablony-dzieci. Twórcy Django użyli tej techniki, by stworzyć kompletnie inne mobilne wersje stron – po prostu przez stworzenie nowych szablonów bazowych.</p>\n<p>Zwróć uwgę, że nie musisz używać systemu szablonów Django jeśli wolisz inny system. Pomimo że system szablonów Django jest szczególnie dobrze zintegrowany z warstwą modelu Django, nic nie zmusza cię do jego używania. Tak naprawdę nie musisz używać też bazodanowego API Django. Możesz użyć inną warstwę abstrakcji bazy danych, możesz czytać pliki XML, możesz czytać pliki z dysku lub cokolwiek co chcesz. Każdy kawałek Django – modele, widoki, szablony – jest rozdzielony od następnego.</p>\n</section>\n<section id=\"this-is-just-the-surface\">\n<h2>To tylko powierzchnia<a class=\"heading-anchor\" href=\"#this-is-just-the-surface\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>To był tylko szybki przegląd funkcjonalności Django. Niektóre bardziej przydatne funkcje:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/pl/2.1/topics/cache/\"><span class=\"doc\">Framework cache’owania</span></a>, który integruje się z Memcached lub innymi back-endami.</p></li>\n<li><p><a class=\"reference internal\" href=\"/pl/2.1/ref/contrib/syndication/\"><span class=\"doc\">Framework syndykacyjny</span></a>, który sprowadza tworzenie feedów RSS i Atom do napisania małej klasy w Pythonie.</p></li>\n<li><p>Bardziej seksowne automatycznie wygenerowane funkcje panelu administracyjnego – ten przegląd ledwo musnął powierzchnię.</p></li>\n</ul>\n<p>Następne kroki w sposób oczywisty to <a class=\"reference external\" href=\"https://www.djangoproject.com/download/\">pobranie Django</a>, przeczytanie <a class=\"reference internal\" href=\"/pl/2.1/intro/tutorial01/\"><span class=\"doc\">tutoriala</span></a> i dołączenie do <a class=\"reference external\" href=\"https://www.djangoproject.com/community/\">społeczności</a>. Dziękujemy za zainteresowanie!</p>\n</section>","rootId":"django-at-a-glance","toc":[{"title":"Zaprojektuj swój model","anchor":"design-your-model","children":[]},{"title":"Zainstaluj","anchor":"install-it","children":[]},{"title":"Ciesz się wolnym API","anchor":"enjoy-the-free-api","children":[]},{"title":"Dynamiczny interfejs administracyjny: to nie tylko rusztowanie – to cały dom","anchor":"a-dynamic-admin-interface-it-s-not-just-scaffolding-it-s-the-whole-house","children":[]},{"title":"Zaprojektuj swoje URL-e","anchor":"design-your-urls","children":[]},{"title":"Napisz swoje widoki","anchor":"write-your-views","children":[]},{"title":"Zaprojektuj swoje szablony","anchor":"design-your-templates","children":[]},{"title":"To tylko powierzchnia","anchor":"this-is-just-the-surface","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Pierwsze kroki","url":"/pl/2.1/intro/"}],"prev":{"docname":"intro/index","title":"Pierwsze kroki","url":"/pl/2.1/intro/"},"next":{"docname":"intro/install","title":"Przewodnik szybkiej instalacji","url":"/pl/2.1/intro/install/"},"formats":{"html":"/pl/2.1/intro/overview/","markdown":"/pl/2.1/intro/overview.md","json":"/pl/2.1/intro/overview.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/intro/overview.txt","official":"https://docs.djangoproject.com/pl/2.1/intro/overview/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}