{"id":364,"date":"2018-01-05T11:47:53","date_gmt":"2018-01-05T09:47:53","guid":{"rendered":"https:\/\/sebastian.fam-knopp.de\/?p=364"},"modified":"2018-05-28T17:33:06","modified_gmt":"2018-05-28T15:33:06","slug":"zimmerverwaltung-mit-django-rest-framework-2-und-angular-5","status":"publish","type":"post","link":"https:\/\/sebastian.knopp.it\/?p=364","title":{"rendered":"Zimmerverwaltung mit Django REST Framework und Angular"},"content":{"rendered":"<p>Viele Jahre habe ich bei der Webentwicklung prim\u00e4r auf PHP und jQuery gesetzt, aber 2017 war es definitiv Zeit f\u00fcr neue Projekte auf modernere Frameworks zu setzen. Um der Einarbeitung in die neuen Frameworks auch einen praktischen Sinn zu geben, nutzte ich die Bundeskonferenz 2017 der KSJ als Anlass und programmierte hierf\u00fcr eine Zimmerverwaltung. <em>(&#8230;und eine Veranstaltungs-Website mit WordPress)<\/em><\/p>\n<h4>Der Server &#8211; Django REST Framework<\/h4>\n<p>Ich entdeckte das <a href=\"http:\/\/www.django-rest-framework.org\/\">Django-REST-Framework<\/a> f\u00fcr mich, welches mit sehr wenig Code eine REST-API erzeugen kann, hierbei die Datenbankanbindung komplett wegabstrahiert und auch die SQL-Skripte f\u00fcr \u00c4nderungen zwischen den Models (&#8222;Migrationsskripte&#8220;) automatisch erzeugt. Wenn man es braucht kann man aber auch sehr viel detaillierter programmieren und eigene Erweiterungen schreiben. Nach Durcharbeitung der Tutorials lie\u00df sich innerhalb von gerade einmal 2 Stunden ein erster vollst\u00e4ndiger lauff\u00e4higer Prototyp f\u00fcr die Web-API meines neuen Projekts erstellen.<\/p>\n<h4>Der Client &#8211; Angular 5 \/ Bootstrap<\/h4>\n<p>Auf Clientseite bietet sich als wesentliche Verbesserung zu jQuery inzwischen die M\u00f6glichkeit nicht mehr jede Interaktion eines Benutzers einzeln programmieren zu m\u00fcssen. Das geht durch sogenanntes Data Binding. Man fragt von einem Formularfeld also nicht mehr ab &#8222;wie ist dein Wert?&#8220; sondern bindet eine Variable an ein Feld. \u00c4ndert der Benutzer den Wert des Feldes, so wird dies automatisch auch in der Variable und damit an allen anderen Stellen wo sich die Variable findet getan. Die Folge: nie wieder eigene onClick-\/onChange-\/sonstwas-Listener! Diese Funktionalit\u00e4t bieten unter anderem die bekannten Frameworks React und Angular. Die Wahl ist letztlich wohl Geschmackssache und laut mehrerer Blogs gibt es in der Vorgehensweise keine wesentlichen Unterschiede. Ich entschied mich f\u00fcr die Nutzung von <a href=\"https:\/\/angular.io\/\">Angular<\/a>. Um auch mit CSS m\u00f6glichst keinen Aufwand zu haben nutzte ich Twitters <a href=\"https:\/\/getbootstrap.com\/\">Bootstrap<\/a> f\u00fcr die Umsetzung eines einheitlichen Designs, haupts\u00e4chlich weil mir dieses einfach optisch sehr gut gef\u00e4llt und auch mobilf\u00e4hig ist.<\/p>\n<h4>Das Projekt<\/h4>\n<p>Ich geh\u00f6rte mit zum Organisationsteam der KSJ Bundeskonferenz 2017. Hier galt es 140 Teilnehmer in einem sehr eng gesteckten Zeitrahmen m\u00f6glichst schnell einzuchecken, um einen schnellen Konferenzbeginn zu garantieren. Zudem mussten Listen \u00fcber Stimmberechtigte und nicht Stimmberechtigte Delegierte und Namenslisten mit den Stimmk\u00e4rtchen-Nummern der Delegierten f\u00fcr die Moderation erstellt werden.<\/p>\n<p>Beim Check-In mussten die Leute also:<\/p>\n<ul>\n<li>in ein Zimmer eingeteilt werden<\/li>\n<li>ihr Stimmrecht festgestellt werden<\/li>\n<li>ihnen ein eigenes Stimmk\u00e4rtchen mit eindeutiger Nummer zugewiesen werden<\/li>\n<li>weitere nicht IT-relevante Dinge gekl\u00e4rt werden<\/li>\n<\/ul>\n<p>Mein Programm sollte die entsprechenden Listen und Zuteilungen schnell erm\u00f6glichen. Wir sammelten die Teilnehmerdaten zuvor mittels einer eigenen Veranstaltungs-Website mit Buchungsformular. Von dort exportierte ich die Daten und importierte sie in Django. Nun musste noch eine Zimmerliste des Veranstaltungsortes angelegt werden. Technisch stellte die Serverseite sicher, dass bspw. keine \u00dcberbelegung von Zimmern stattfand und die Clientseite stellte freie und belegte Zimmer optisch unterschiedlich dar um schnell freie Pl\u00e4tze finden zu k\u00f6nnen.<\/p>\n<p>Einmal eingecheckt lie\u00dfen sich einfach die ben\u00f6tigten Listen erzeugen und per PDF exportieren und drucken.<\/p>\n<p>Leider habe ich es zeitlich nicht mehr hinbekommen, eine sichere und praxistaugliche Authentifizierung zu implementieren, weswegen ich die Anwendung mittels Batch-Script lokal auf meinem Laptop hostete und an weiteren Ger\u00e4ten intern aufrief. Dennoch war ich mit dem Ergebnis insgesamt sehr zufrieden, da ich verglichen mit der vorigen Arbeitsweise mit PHP\/jQuery enorm viel Zeit einsparen konnte. Django und Angular werden sich nun auch in meinen zuk\u00fcnftigen Projekten wiederfinden.<\/p>\n<p>Anbei noch ein paar Screenshots der Anwendung:<\/p>\n<div data-carousel-extra='{&quot;blog_id&quot;:1,&quot;permalink&quot;:&quot;https:\/\/sebastian.knopp.it\/?p=364&quot;}' id='gallery-1' class='gallery galleryid-364 gallery-columns-3 gallery-size-medium'><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a title=\"zimmerverwaltung_0\" href='https:\/\/sebastian.knopp.it\/?attachment_id=419'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"221\" src=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_0-300x221.png\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-1-419\" srcset=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_0-300x221.png 300w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_0-768x565.png 768w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_0-1024x753.png 1024w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_0.png 1420w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" data-attachment-id=\"419\" data-permalink=\"https:\/\/sebastian.knopp.it\/?attachment_id=419\" data-orig-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_0.png\" data-orig-size=\"1420,1044\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"zimmerverwaltung_0\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Start \u00fcber Batch-Skript f\u00fcr lokales Hosting&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_0-300x221.png\" data-large-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_0-1024x753.png\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-419'>\n\t\t\t\tStart \u00fcber Batch-Skript f\u00fcr lokales Hosting\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a title=\"zimmerverwaltung_1\" href='https:\/\/sebastian.knopp.it\/?attachment_id=420'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"172\" src=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_1-300x172.png\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-1-420\" srcset=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_1-300x172.png 300w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_1-768x441.png 768w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_1-1024x588.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" data-attachment-id=\"420\" data-permalink=\"https:\/\/sebastian.knopp.it\/?attachment_id=420\" data-orig-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_1.png\" data-orig-size=\"2160,1240\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"zimmerverwaltung_1\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Dashboard mit Zahlen\u00fcbersicht&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_1-300x172.png\" data-large-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_1-1024x588.png\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-420'>\n\t\t\t\tDashboard mit Zahlen\u00fcbersicht\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a title=\"zimmerverwaltung_2\" href='https:\/\/sebastian.knopp.it\/?attachment_id=421'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"173\" src=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_2-300x173.png\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-1-421\" srcset=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_2-300x173.png 300w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_2-768x443.png 768w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_2-1024x591.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" data-attachment-id=\"421\" data-permalink=\"https:\/\/sebastian.knopp.it\/?attachment_id=421\" data-orig-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_2.png\" data-orig-size=\"2134,1231\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"zimmerverwaltung_2\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Teilnehmer-\u00dcbersicht&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_2-300x173.png\" data-large-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_2-1024x591.png\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-421'>\n\t\t\t\tTeilnehmer-\u00dcbersicht\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a title=\"zimmerverwaltung_3\" href='https:\/\/sebastian.knopp.it\/?attachment_id=422'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"173\" src=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_3-300x173.png\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-1-422\" srcset=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_3-300x173.png 300w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_3-768x442.png 768w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_3-1024x589.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" data-attachment-id=\"422\" data-permalink=\"https:\/\/sebastian.knopp.it\/?attachment_id=422\" data-orig-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_3.png\" data-orig-size=\"2160,1243\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"zimmerverwaltung_3\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Teilnehmer bearbeiten&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_3-300x173.png\" data-large-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_3-1024x589.png\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-422'>\n\t\t\t\tTeilnehmer bearbeiten\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a title=\"zimmerverwaltung_4\" href='https:\/\/sebastian.knopp.it\/?attachment_id=423'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"174\" src=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_4-300x174.png\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-1-423\" srcset=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_4-300x174.png 300w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_4-768x446.png 768w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_4-1024x594.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" data-attachment-id=\"423\" data-permalink=\"https:\/\/sebastian.knopp.it\/?attachment_id=423\" data-orig-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_4.png\" data-orig-size=\"2130,1236\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"zimmerverwaltung_4\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Zimmer-\u00dcbersicht&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_4-300x174.png\" data-large-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_4-1024x594.png\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-423'>\n\t\t\t\tZimmer-\u00dcbersicht\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a title=\"zimmerverwaltung_5\" href='https:\/\/sebastian.knopp.it\/?attachment_id=424'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"173\" src=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_5-300x173.png\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-1-424\" srcset=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_5-300x173.png 300w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_5-768x444.png 768w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_5-1024x591.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" data-attachment-id=\"424\" data-permalink=\"https:\/\/sebastian.knopp.it\/?attachment_id=424\" data-orig-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_5.png\" data-orig-size=\"2140,1236\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"zimmerverwaltung_5\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Zimmer bearbeiten&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_5-300x173.png\" data-large-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_5-1024x591.png\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-424'>\n\t\t\t\tZimmer bearbeiten\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a title=\"zimmerverwaltung_6\" href='https:\/\/sebastian.knopp.it\/?attachment_id=425'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"175\" src=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_6-300x175.png\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-1-425\" srcset=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_6-300x175.png 300w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_6-768x447.png 768w, https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_6-1024x596.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" data-attachment-id=\"425\" data-permalink=\"https:\/\/sebastian.knopp.it\/?attachment_id=425\" data-orig-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_6.png\" data-orig-size=\"2130,1240\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"zimmerverwaltung_6\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Delegierten-\u00dcbersicht&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_6-300x175.png\" data-large-file=\"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_6-1024x596.png\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-425'>\n\t\t\t\tDelegierten-\u00dcbersicht\n\t\t\t\t<\/figcaption><\/figure>\n\t\t<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Viele Jahre habe ich bei der Webentwicklung prim\u00e4r auf PHP und jQuery gesetzt, aber 2017 war es definitiv Zeit f\u00fcr neue Projekte auf modernere Frameworks zu setzen. Um der Einarbeitung in die neuen Frameworks auch einen praktischen Sinn zu geben, nutzte ich die Bundeskonferenz 2017 der KSJ als Anlass und programmierte hierf\u00fcr eine Zimmerverwaltung. (&#8230;und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":422,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-364","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/sebastian.knopp.it\/wp-content\/uploads\/2018\/01\/zimmerverwaltung_3.png","jetpack_shortlink":"https:\/\/wp.me\/p4onxe-5S","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=\/wp\/v2\/posts\/364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=364"}],"version-history":[{"count":6,"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=\/wp\/v2\/posts\/364\/revisions"}],"predecessor-version":[{"id":441,"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=\/wp\/v2\/posts\/364\/revisions\/441"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=\/wp\/v2\/media\/422"}],"wp:attachment":[{"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sebastian.knopp.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}