diff --git a/doc/Django.aux b/doc/Django.aux index ef6db19..fe897df 100644 --- a/doc/Django.aux +++ b/doc/Django.aux @@ -2,19 +2,28 @@ \catcode `"\active \babel@aux{ngerman}{} \@writefile{toc}{\contentsline {section}{\numberline {1}Einleitung}{3}} -\@writefile{toc}{\contentsline {section}{\numberline {2}Struktur}{3}} +\@writefile{toc}{\contentsline {section}{\numberline {2}Routing in Django}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}}{3}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Struktur}{3}} \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Die typische Verzeichnisstruktur eines Django Servers}}{4}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Erstellung}{4}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Erstellung}{4}} \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Verzeichnisstruktur, die der \$ django-admin startproject server Befehl erzeugt}}{4}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}manage.py}{4}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}db.sqlite3}{5}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}server/server}{5}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.4.1}\_\_init\_\_.py}{5}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.4.2}settings.py}{5}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.4.3}urls.py}{5}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}manage.py}{4}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}db.sqlite3}{5}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}server/server}{5}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.1}\_\_init\_\_.py}{5}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2}settings.py}{5}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.3}urls.py}{5}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.4}wsgi.py}{6}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}server/app1}{6}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.1}admin.py}{6}} \gdef\minted@oldcachelist{, default-pyg-prefix.pygstyle, default.pygstyle, 1EF5F198DB11D884A8F3F8166C390F5847D599A9433F896BEC25BBDC7D4D3BE9.pygtex, 20EC931F8490D378180FA3F951C421E447D599A9433F896BEC25BBDC7D4D3BE9.pygtex, - C979C1D44B204897A3DDD0DB9A0A5E7147D599A9433F896BEC25BBDC7D4D3BE9.pygtex} + C979C1D44B204897A3DDD0DB9A0A5E7147D599A9433F896BEC25BBDC7D4D3BE9.pygtex, + D608A7419D2E2B1B9DC8374CBF30931C47D599A9433F896BEC25BBDC7D4D3BE9.pygtex, + 90BB626EF9CFA5AAE8FC387BE92CE4C047D599A9433F896BEC25BBDC7D4D3BE9.pygtex} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.2}apps.py}{8}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.3}forms.py}{8}} diff --git a/doc/Django.pdf b/doc/Django.pdf index 9faa5b2..0b743a0 100644 Binary files a/doc/Django.pdf and b/doc/Django.pdf differ diff --git a/doc/Django.synctex.gz b/doc/Django.synctex.gz index 059cf73..5a71305 100644 Binary files a/doc/Django.synctex.gz and b/doc/Django.synctex.gz differ diff --git a/doc/Django.tex b/doc/Django.tex index 3f5dfb5..7145354 100644 --- a/doc/Django.tex +++ b/doc/Django.tex @@ -6,6 +6,7 @@ \usepackage{dirtree} \usepackage{float} \usepackage{minted} +\usepackage{graphicx} \pagestyle{fancy} @@ -38,7 +39,9 @@ Django stellt eine grundlegende Struktur für die Entwicklung zur Verfügung. So \item Eine Grundstruktur, die Modularität unterstützt und das einfache Installieren oder Entfernen von sogenannten ''Apps'' ermöglicht \end{itemize} Es ist also kaum notwendig, jedoch durchaus möglich, als Entwickler noch SQL zu schreiben wenn man mit dem Django Web-Framework entwickelt. - +\section{Routing in Django} +Das grundlegende und wichtigste Prinzip in Django ist das sogenannte ''Routing''. Dieses Prinzip beschreibt den Weg, den eine Anfrage zurücklegt um zu einer Antwort zu führen. +\subsection{} \section{Struktur} Ein typischer Django Server ist aus sogenannten ''Apps'' aufgebaut. Diese werden entweder vom Entwickler selber geschrieben oder können via pip (dem Python Paket Manager) installiert werden. Ein standard Verzeichnisaufbau ist in Abbildung 1 dargestellt. \newpage @@ -111,10 +114,59 @@ Diese Datei ist der erste und wichtigste Teil des Django Routing Systems. Über path('settings/', include('settings_app.urls')), ] \end{minted} -Hier werden zuerst Pakete für das admin-Interface und Pakete für das URL-Routing importiert. Anschließend wird eine Liste urlpatterns definiert. Diese enthält alle URL Pfade. +Hier werden zuerst Pakete für das admin-Interface und Pakete für das URL-Routing importiert. Anschließend wird eine Liste urlpatterns definiert. Diese enthält alle URL Pfade. include() Importiert dabei die urls.py Dateien aus den anderen apps. + +\subsubsection{wsgi.py} +Diese Datei stellt ein ''application'' genanntes WSGI Objekt zur Verfügung. Es wird zum starten des Testservers genutzt. In Verbindung mit ''mod\_wsgi'' kann auch Apache dieses Objekt nutzen.\footnote{Django Dokumentation https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/} +\subsection{server/app1} +Dieses Verzeichnis enthält alle Dateien, die eine App ausmachen. In diesem Fall heißt die App beispielhaft ''app1''. Die Dateien, die in Abb 1 erscheinen, jedoch hier nicht erwähnt werden, haben die selbe Funktion wie die gleichnamigen Dateien im ''server/server'' Ordner. + +\subsubsection{admin.py} +Die admin.py dient dazu das Django Admin Interface zu konfigurieren. In ihr werden die Models registriert, die auf der admin Seite zu sehen sind, und wie diese dargestellt werden sollen. Sie sieht beispielsweise in der ''object\_adder'' app folgendermaßen aus: + +\begin{minted}[linenos, frame=lines, framesep=2mm]{Python} +from django.contrib import admin +from .models import Object, Category +class ObjectAdmin(admin.ModelAdmin): + list_display = ('title', 'ammout', 'uuid', 'img') +class CategoryAdmin(admin.ModelAdmin): + list_display = ('name', 'id') + + +# Register your models here. +admin.site.register(Object, ObjectAdmin) +admin.site.register(Category, CategoryAdmin) +\end{minted} +In Zeile 2 werden die in der models.py definierten Models importiert um Zugriff auf diese zu erlangen. +\newline +Anschließend wird für jedes Model eine Klasse erstellt. In dieser Klasse wird jeweils eine ''list\_display'' Variable definiert, die ein Tupel enthält, mit dem alle darzustellenden Attribute an die admin library übergeben werden können. Diese Abmin-Klassen müssen jetzt noch zusammen mit dem Model an die admin library übergeben werden. Dies erfolgt duch die Befehle in Zeile 14 und 15. Dieser Code erzeugt demnach folgendes Admin-Interface: +\newline +\begin{center} +\includegraphics[width=\linewidth, height=7.5cm]{django_admin_objects.png} +\quad +\\[\baselineskip]% adds vertical line spacing +\includegraphics[width=\linewidth]{django_admin_cats.png} +\end{center} + +Ohne die ''list\_display'' Angebe würde nur der primary key des Models angezeigt und das Interface sähe folgendermaßen aus: +\newline +\begin{center} + \includegraphics[width=\linewidth]{django_admin_obj_pk.png} +\end{center} +\subsubsection{apps.py} +Hier ist der Name der app definiert. Diese Datei ist außerdem notwendig, damit die App von Django als solche erkannt wird. +\begin{minted}[linenos, frame=lines, framesep=2mm]{Python} +from django.apps import AppConfig + +class ObjectAdderConfig(AppConfig): + name = 'objectadder' +\end{minted} +\subsubsection{forms.py} +In dieser Datei werden Formulare definiert. So beispielsweise das Formular zur Erstellung von Objekten und Kategorien. + \end{document} diff --git a/doc/Django.toc b/doc/Django.toc index f40bafc..090da4d 100644 --- a/doc/Django.toc +++ b/doc/Django.toc @@ -1,10 +1,17 @@ \babel@toc {ngerman}{} \contentsline {section}{\numberline {1}Einleitung}{3} -\contentsline {section}{\numberline {2}Struktur}{3} -\contentsline {subsection}{\numberline {2.1}Erstellung}{4} -\contentsline {subsection}{\numberline {2.2}manage.py}{4} -\contentsline {subsection}{\numberline {2.3}db.sqlite3}{5} -\contentsline {subsection}{\numberline {2.4}server/server}{5} -\contentsline {subsubsection}{\numberline {2.4.1}\_\_init\_\_.py}{5} -\contentsline {subsubsection}{\numberline {2.4.2}settings.py}{5} -\contentsline {subsubsection}{\numberline {2.4.3}urls.py}{5} +\contentsline {section}{\numberline {2}Routing in Django}{3} +\contentsline {subsection}{\numberline {2.1}}{3} +\contentsline {section}{\numberline {3}Struktur}{3} +\contentsline {subsection}{\numberline {3.1}Erstellung}{4} +\contentsline {subsection}{\numberline {3.2}manage.py}{4} +\contentsline {subsection}{\numberline {3.3}db.sqlite3}{5} +\contentsline {subsection}{\numberline {3.4}server/server}{5} +\contentsline {subsubsection}{\numberline {3.4.1}\_\_init\_\_.py}{5} +\contentsline {subsubsection}{\numberline {3.4.2}settings.py}{5} +\contentsline {subsubsection}{\numberline {3.4.3}urls.py}{5} +\contentsline {subsubsection}{\numberline {3.4.4}wsgi.py}{6} +\contentsline {subsection}{\numberline {3.5}server/app1}{6} +\contentsline {subsubsection}{\numberline {3.5.1}admin.py}{6} +\contentsline {subsubsection}{\numberline {3.5.2}apps.py}{8} +\contentsline {subsubsection}{\numberline {3.5.3}forms.py}{8} diff --git a/doc/django_admin_cats.png b/doc/django_admin_cats.png new file mode 100644 index 0000000..321aaf3 Binary files /dev/null and b/doc/django_admin_cats.png differ diff --git a/doc/django_admin_obj_pk.png b/doc/django_admin_obj_pk.png new file mode 100644 index 0000000..4593bbd Binary files /dev/null and b/doc/django_admin_obj_pk.png differ diff --git a/doc/django_admin_objects.png b/doc/django_admin_objects.png new file mode 100644 index 0000000..0e7ed53 Binary files /dev/null and b/doc/django_admin_objects.png differ diff --git a/invsystem/object_adder/admin.py b/invsystem/object_adder/admin.py index a150f17..5e7175b 100644 --- a/invsystem/object_adder/admin.py +++ b/invsystem/object_adder/admin.py @@ -5,7 +5,6 @@ from .models import Object, Category class ObjectAdmin(admin.ModelAdmin): list_display = ('title', 'ammout', 'uuid', 'img') - class CategoryAdmin(admin.ModelAdmin): list_display = ('name', 'id')