Django Beginner Workshop

Ähnliche Dokumente
Django Beginner Workshop

Schnell performante Web-Applikationen entwickeln. Markus Zapke-Gründemann LinuxTag 2012

Django - ein Python Web-Framework

Django in a Nutshell. Python User Group München - µpy 6. November juergen.schackmann@gmail.com

??? Thursday, July 26, 12

Django The Web framework for perfectionists with deadlines.

Webentwicklung mit Django

Rails Ruby on Rails Ajax on Rails. Clemens H. Cap

Demo Kino: Der Herr der Wolken Die Gefährten

Composing Shops. Modulinstallation und andere coole Composer Features. (auch) für den OXID eshop... und ein bisschen Shopware ;)

Rails Ruby on Rails Ajax on Rails. Clemens H. Cap

Silverstripe CMS und das Sapphire Framework

Upgrade auf TYPO3 6.2

Web-Anwendungsentwicklung mit dem Delivery Server

Foreign Data Wrappers

Oracle9i Designer. Rainer Willems. Page 1. Leitender Systemberater Server Technology Competence Center Frankfurt Oracle Deutschland GmbH

Perl vergessen und unterschätzt

Perl-Praxis. CGI-Skripte. Jörn Clausen Jens Reeder, Jan Krüger

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Programmierung eines GIMP-Plugin

Elasticsearch und die Oracle Datenbank

Multimedia im Netz Wintersemester 2012/13

TimeMachine. Installation und Konfiguration. Version 1.4. Stand Dokument: install.odt. Berger EDV Service Tulbeckstr.

NEWSLETTER. FileDirector Version 2.5 Novelties. Filing system designer. Filing system in WinClient

ColdFusion 8 PDF-Integration

Skalierbare Webanwendungen mit Python und Google App Engine

Inhaltsverzeichnis. Einleitung

Celery Eine asynchrone Task Queue (nicht nur) für Django. Markus Zapke-Gründemann Leipzig Python User Group

Ablauf Unit2. Walkthrough

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

Grundlagen der Web-Entwicklung

oder von 0 zu IaaS mit Windows Server, Hyper-V, Virtual Machine Manager und Azure Pack

Kompendium der Web-Programmierung

Praktische Anwendung von Metaklassen

i-net HelpDesk Erste Schritte

Joomla Schulung. Open Source CM-System. Projekt-Nr Thomas Haussener, MA. 20. Juni 2007

Linux-Camp: Linux als Server am Beispiel LAMP

NVR Mobile Viewer for iphone/ipad/ipod Touch

Custom Themes from Scratch Stefan Fröhlich. WordCamp Nürnberg 2016

Web 2. Gang. Python User Group Köln Christopher Arndt

GIS mit Ruby on Rails

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

PostgreSQL unter Debian Linux

Wordpress am eigenen Server installieren

Rails Ruby on Rails Ajax on Rails. Clemens H. Cap

Konfiguration des Web Connectors

Benutzer- und Gruppenverwaltung, Registrierung

Mojolicious. Ich zeige dir jetzt, wie du mit Mojolicious eine Vorlage. Das Mojolicious-Gerüst

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Mul$media im Netz (Online Mul$media) Wintersemester 2014/15. Übung 02 (Nebenfach)

Python SVN-Revision 12

Hier folgt eine kurze Aufstellung über die verwendete Architekur. Die Angaben sind ohne Gewähr für Vollständigkeit oder vollständige Richtigkeit.

Groovy und CouchDB. Ein traumhaftes Paar. Thomas Westphal

SharePoint Online Connector

Übung 1: Von einer naiven JavaScript Applikation zu einem modernen Front-End Build:

Joomla 1.5. Einführung in die Installation und Benützung

Perl-Praxis. CGI-Skripte. Jörn Clausen

Pylons & ExtJS. PyCologne Vortrag Köln, smart:elligence Unternehmensberatung, Düsseldorf

This manual cannot be redistributed without permission from joomla-monster.com or vorlagenstudio.de

Java Server Pages (JSP)

Security. Stefan Dahler. 6. Zone Defense. 6.1 Einleitung

Dockerbank II. Block 2: Komplexbeispiel. Benjamin Baum 1, Christian Bauer 1

Ablauf. Wichtige Termine. Vertiefendes Übungsprojekt - SQL II

Von 0 zur Private Cloud in 1h

Web-basierte Anwendungssysteme PHP Teil 2

SemTalk Services. SemTalk UserMeeting

Mit PL/SQL auf s ipad

SHOWCASE MIT OVERRIDES UND CUSTOM FIELDS ZUR BESSEREN INHALTSPFLEGE

Umbenennen eines NetWorker 7.x Servers (UNIX/ Linux)

Java - Webapplikationen

Eigene Themes from Scratch Stefan Fröhlich.! WordCamp Berlin 2015

Webdeployment 2.0 Webanwendungen komfortabel bereitstellen, aus Hoster und Kundensicht.

Grails. Weiterführende Themen zu Internet- und WWW-Technologien. Matthias Springer. 06. Juni 2011

Python zur Lösung von AvA Übung 1 VON MORITZ FEY

Frühling für iphone-apps

SharePoint 2010 Mobile Access

Installationsanleitung für. SugarCRM Open Source. Windows Einzelplatz

Exercise (Part II) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1

Inhaltsverzeichnis. vii

Exercise (Part I) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1

Übungen. DI (FH) Levent Öztürk

Erfahrungsbericht. Sven Koschnicke Christian Wulf Florian Fittkau Universeller Aufgabenclient

Webanwendungen mit Java und JavaServerPages

1. Zusammenfassung der letzten Vorlesung

Perl-Praxis. CGI-Skripte. Madis Rumming, Jan Krüger.

Mails in Python senden

Ruhr.pm Das Catalyst MVC-Framework Autor: Datum:

PostgreSQL auf Debian System

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II SS 2015 PHP MVC. Dr. Christian Senger. PHP MVC 1 von 21

Installation Guide/ Installationsanleitung. Spring 16 Release

Anleitung. Integration von Kentix Geräten in den OpManager

VNUML Projektpraktikum

Der Inhalt dieses Foliensatzes ist nicht klausurrelevent!!! - aber trotzdem interessant ;-)

Test Doc Documentation

Wie ich lernte die API zu lieben. 19. März sic[!]sec GmbH Industriestraße Gröbenzell

SINT Rest App Documentation

Grundlagen der Web-Entwicklung INF3172

Joomla! 1.5 Extensions

Transkript:

Django Beginner Workshop Release 1.4 Dennis Schwertel <s@digitalkultur.net> Oct 09, 2017

Contents 1 Basics 1 1.1 django.................................................. 1 1.2 Wo wird django genutzt?......................................... 1 1.3 Was beinhaltet django?.......................................... 2 1.4 (Stark vereinfachter) Requestablauf................................... 2 1.5 Bei Fragen................................................ 2 2 Das Projekt 3 2.1 Ein Portfolio............................................... 3 2.2 Datenmodell für unsere Seite...................................... 3 2.3 virtualenv (venv)............................................. 4 2.4 venv einrichten.............................................. 4 2.5 django installieren............................................ 4 2.6 django installieren 2........................................... 4 2.7 Das django admin tool.......................................... 5 2.8 Was wurde erstellt?............................................ 5 2.9 runserver................................................. 5 2.10 runserver starten............................................. 5 2.11 It worked!................................................ 6 3 View 7 3.1 Die erste App erstellen......................................... 7 3.2 Was wurde erstellt?............................................ 7 3.3 App in den INSTALLED_APPS eintragen............................... 7 3.4 Die erste View.............................................. 8 3.5 URL-Mapping.............................................. 8 3.6 App urls.py................................................ 8 3.7 Importieren in der globalen Datei.................................... 8 3.8 Recap: Wo stehen wir gerade?...................................... 9 4 Templates 11 4.1 Template Language........................................... 11 4.2 Template Language........................................... 11 4.3 Template-HTML............................................. 12 4.4 Template in der View verwenden.................................... 12 4.5 Statische Medieninhalte......................................... 12 4.6 Im Template............................................... 12 i

4.7 Assets einbinden............................................. 13 4.8 Übung: Über mich -Seite........................................ 13 5 Database 15 5.1 Das erste Model............................................. 15 5.2 Datenbank................................................ 15 5.3 SQLite.................................................. 16 5.4 PostgreSQL................................................ 16 5.5 Models.................................................. 16 5.6 Models.................................................. 16 5.7 Model Feld Typen............................................ 17 5.8 Datenbank erstellen........................................... 17 5.9 Shell debugging............................................. 17 5.10 Shell debugging 2............................................ 18 5.11 django Admin.............................................. 18 5.12 django Admin: aktivieren........................................ 19 5.13 django Admin Demo........................................... 19 5.14 Models am admin registrieren...................................... 19 5.15 Populate-Skript.............................................. 19 5.16 Der Adminuser im Template....................................... 20 5.17 Admin Showcase............................................. 20 6 Model-Templates 21 6.1 Models im Template........................................... 21 6.2 Models in Templates: View Liste.................................... 21 6.3 Template................................................. 22 6.4 Model Detailseite: View Detail..................................... 22 6.5 Model Detailseite: URL-Mapping.................................... 22 6.6 Model Detailseite: Template....................................... 22 6.7 Model URLs Funktion am Model.................................... 23 6.8 Verlinkung im Template......................................... 23 6.9 Asset Management............................................ 23 6.10 Asset Management 1........................................... 23 6.11 Asset Management 2........................................... 24 6.12 Asset Management 3........................................... 24 6.13 Asset Management 4........................................... 24 6.14 Asset Management 5........................................... 24 6.15 Übung: Projekt-Kategorien....................................... 25 7 Forms 27 7.1 Form: Checkliste............................................. 27 7.2 forms.py und ModelsForm........................................ 27 7.3 Form: die View Dazu.......................................... 28 7.4 Form: URL-Mapping.......................................... 28 7.5 Form: Das Template........................................... 28 8 Outro 29 8.1 Weitere Informationen.......................................... 29 8.2 Danke................................................... 29 8.3 Wie man mich erreichen kann...................................... 29 ii

CHAPTER 1 Basics django MVT-Webframework Python 2/3 Aktuelle Version 1.11 LTS Pluggability Don t repeat yourself (DRY) Introspection Note: Benannt nach Django Reinhardt, Gitarrist Kommt aus der Zeitungswelt Wo wird django genutzt? disqus Pinterest Instagram Mozilla NASA 1

Was beinhaltet django? Webserver Middleware URL-Dispatcher Views Models: ORM-Mapper Form-Validator Admin-Interface Templates... (Stark vereinfachter) Requestablauf Note: Ein Request Object hat alle Informationen zu dem Request. Unter anderem Context-Variablen, Post/Get, URL, Languages. Bei Fragen Google Offizielle Dokumentation: https://docs.djangoproject.com/ 2 Chapter 1. Basics

CHAPTER 2 Das Projekt Ein Portfolio Seiten Startseite mit Projektübersicht Projektdetailseite Kontaktformular Design nach Bedarf (http://getbootstrap.com/) Datenmodell für unsere Seite 3

virtualenv (venv) Kapseln der Python Pakete in einer unabhängigen Installation Unterschiedliche Projekte können unterschiedliche Abhängigkeiten bekommen Volle Unterstützung von pip Keine root-rechte für Installation von Paketen venv einrichten user@hostname:$ virtualenv venv New python executable in venv/bin/python Installing setuptools, pip...done. user@hostname:$ source venv/bin/activate (venv)user@hostname:$ deactivate user@hostname:$ Note: Man kann auch virtualenv wrapper verwenden. Je nach Situation kann dieser Arbeit abnehmen. http://virtualenvwrapper.readthedocs.org/en/latest/ django installieren $ pip install django==1.11.* $ pip install psycopg2 # Für Postgres $ pip install Pillow # Für Bilder $ pip freeze Warning: Für diesen Befehl und für alle weiteren Befehle muss man die venv aktiviert haben. django installieren 2 $ python -c "import django; print(django.get_version())" 1.8.15 4 Chapter 2. Das Projekt

Das django admin tool $ django-admin startproject portfolio class slidecenter Was wurde erstellt? Note: Besonders wichtig sind: manage.py settings.py urly.py wsgi.py runserver Einfacher debugging Server NICHT(!) produktiv nutzen autoreload (fehlerhaft) runserver starten $ python manage.py runserver 0.0.0.0:8000 Performing system checks... System check identified no issues (0 silenced). You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them. October 04, 2017-16:32:20 Django version 1.11.6, using settings 'portfolio.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. 2.7. Das django admin tool 5

It worked! Note: Im runserver sieht man logs aller requests Strg + C zum Beenden 6 Chapter 2. Das Projekt

CHAPTER 3 View Die erste App erstellen Apps sind gekapselte Plugins für django Alles muss und wird in einer App gekapselt $ python manage.py startapp core class slidecenter Was wurde erstellt? App in den INSTALLED_APPS eintragen in portfolio/settings.py INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'core', ) 7

Die erste View In core/views.py: from django.http import HttpResponse def index(request): return HttpResponse("hello world!") URL-Mapping URLs sind so wichtig wie Code Keine IDs => 123 Nur Slugs => meine-projektseite http://en.wikipedia.org/wiki/semantic_url App urls.py core/urls.py from django.conf.urls import url from core import views urlpatterns = [ url(r'^$', views.index, name='index') ] Note: Viele regex Möglichkeiten, unter anderem mit Variablenzuweisung. Importieren in der globalen Datei portfolio/urls.py from django.conf.urls import include, url from django.contrib import admin from core import urls as core_urls urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^core/', include(core_urls)) ] 8 Chapter 3. View

Note: In der realen Welt wird man das vermutlich nicht so sauber trennen. Hier für den Workshop arbeiten wir aber so sauber wie möglich! Recap: Wo stehen wir gerade? 3.8. Recap: Wo stehen wir gerade? 9

10 Chapter 3. View

CHAPTER 4 Templates Template Language Absichtlich: Einfacher Syntax!KEINE LOGIK! Wurde von vielen kopiert Template Language Tags: {% if %}, {% endif %}, {% load static %} Filter: {{project.name lower striptags truncatewords:2 }} Vererbung: {% extends "base.html" %}, {% block content %} Note: Man kann sehr einfach eigene Tags/Filter schreiben https://docs.djangoproject.com/en/1.7/ref/templates/ builtins/ 11

Template-HTML core/templates/index.html <!DOCTYPE html> <html> <head> <title>portfolio</title> </head> <body> <h1>hi!</h1> {{ message }} </body> </html> Template in der View verwenden core/views.py from django.template import RequestContext def index(request): context_dict = {'message': "Ich komme aus dem context_dict"} return render(request, 'index.html', context_dic) Statische Medieninhalte portfolio/settings.py STATIC_URL = '/static/' Note: Statische Inhalte sind anders zu behandeln als Medieninhalte. Im Template core/templates/index.html {% load staticfiles %} <img src="{% static 'example.jpg' %}" alt="picture" /> Note: Das Bild dazu muss unter core/static/example.jpg liegen. 12 Chapter 4. Templates

Assets einbinden <link rel="stylesheet" href="{% static 'css/base.css' %}" /> <script src="{% static 'js/jquery.js' %}"></script> Übung: Über mich -Seite Entwickele eine eigene über mich -Seite Url verlinkungen mit dem URL Tag: https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#url 4.7. Assets einbinden 13

14 Chapter 4. Templates

CHAPTER 5 Database Das erste Model Datenbank PostgreSQL MySQL SQLite Oracle (MSSQL) (NOSQL) 15

SQLite portfolio/settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(base_path, 'portfolio.db'), } } Warning: Niemals SQLite produktiv nutzen PostgreSQL portfolio/settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'db_name', 'USER': 'db_user', 'PASSWORD': 'db_user_password', 'HOST': '' } } Models Beschreibung von Daten in Python-Objekten Wir bekommen geschenkt : auto Validierungen auto Forms auto Admin Models core/models.py 16 Chapter 5. Database

class Kategorie(models.Model): name = models.charfield(max_length=128, unique=true, help_text="der Name") def unicode (self): return self.name class Project(models.Model): category = models.foreignkey("kategorie", related_name="projects", null=true) name = models.charfield(max_length=128, unique=true) def unicode (self): return self.name Model Feld Typen CharField / TextField URLField IntegerField BooleanField ImageField DateField ForeignKey / OneToOneField / ManyToManyField... Note: https://docs.djangoproject.com/en/1.8/ref/models/fields/ Datenbank erstellen $ python manage.py migrate $ python manage.py makemigration core $ python manage.py migrate Shell debugging 5.7. Model Feld Typen 17

$ python manage.py shell Shell debugging 2 >>> from core.models import Project >>> print Project.objects.all() [] >>> p = Project(name="Test") >>> print Project.objects.all() [] >>> p.save() >>> print Project.objects.all() [<Project: Test>] >>> quit() Note: Daten lesen / schreiben: all() filter(...) get(...) order() save() Chaining bei QuerySets Field Lookups Genelle Informationen zum Query erstellen: https://docs.djangoproject.com/en/1.11/topics/db/queries/ #field-lookups class slidecenter django Admin Note: Der Admin funktioniert über Introspection im Gegensatz zu zum Beispiel Ruby on Rails. 18 Chapter 5. Database

django Admin: aktivieren INSTALLED_APPS = ( 'django.contrib.admin', #hier 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'core', ) Note: Bei neuen django Installationen ist der Admin schon aktiviert. class slidecenter django Admin Demo Note: /admin Models am admin registrieren core/admin.py from django.contrib import admin from core.models import Project admin.site.register(project) Populate-Skript populate.py import os def populate(): Project.objects.get_or_create(name="myProject") #... for p in Project.objects.all(): print p 5.12. django Admin: aktivieren 19

if name == ' main ': print "Starting Population script..." os.environ.setdefault('django_settings_module', 'portfolio.settings') import django django.setup() from core.models import Project populate() Der Adminuser im Template core/templates/index.html {% if user.is_authenticated %} nice to see you {% else %} who are you {% endif %} class slidecenter Admin Showcase Was so geht... 20 Chapter 5. Database

CHAPTER 6 Model-Templates Models im Template Liste View erweitern Template erweitern Detailseite Neue View + URL-Mapping Neues Template Verlinkung von Liste Models in Templates: View Liste core/views.py from core.models import Project def index(request): #... project_list = Project.objects.all() context_dict = {'projects': project_list} #... 21

Template core/templates/index.html {% if projects %} <ul> {% for project in projects %} <li>{{ project.name }}</li> {% endfor %} </ul> {% else %} <strong>keine Projekte</strong> {% endif %} Model Detailseite: View Detail core/views.py from django.shortcuts import get_object_or_404 from core.models import Project from django.template import RequestContext def project(request, project_id): project = get_object_or_404(project, id=project_id) context_dict = {'project': project} return render(request, 'project.html', context_dict) Note: Siehe auch get_list_or_404 Model Detailseite: URL-Mapping core/urls.py url(r'^project/(?p<project_id>\d+)/$', views.project, name='project'),) Note: Weitere Beispiele: * (?P<project_name>w+) * (?P<year>d{4}) * (?P<month>[a-z]{3}) Model Detailseite: Template core/templates/project.html 22 Chapter 6. Model-Templates

<!DOCTYPE html> <html> <head> <title>project</title> </head> <body> <h1>{{ project.name }}</h1> <p>{{ project.copy }}</p> </body> </html> Model URLs Funktion am Model core/models.py def get_absolute_url(self): from django.core.urlresolvers import reverse return reverse('project', args=[str(self.id)]) Note: Um Objekte zu referenzieren, ist es sehr hilfreich, die Objekte um Funktionen zu erweitern wie get_absolute_url. Verlinkung im Template <a href="{{ project.get_absolute_url }}">{{ project.name }}</a> Asset Management Wir bauen einen einfachen Bildupload Asset Management 1 Neues Attribut hinzufügen core/models.py image = models.imagefield(upload_to='project') 6.7. Model URLs Funktion am Model 23

Asset Management 2 Settings Überprüfen portfolio/settings.py MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(base_dir, 'media') Asset Management 3 Template Context Processor setzen für Media damit {{MEDIA_URL}} auch im Template zur Verfügung steht. portfolio/settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.djangotemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [... 'django.template.context_processors.media',... ], }, }, ] Asset Management 4 portfolio/urls.py from django.conf.urls.static import static from django.conf import settings if settings.debug: urlpatterns += static(settings.media_url, document_root=settings.media_root) Asset Management 5 Auf der Detailseite das Bild hinzufügen core/templates/project.html 24 Chapter 6. Model-Templates

<img src="{{ MEDIA_URL }}{{ project.image }}"> Übung: Projekt-Kategorien Kategorieliste mit Projekten darstellen 6.15. Übung: Projekt-Kategorien 25

26 Chapter 6. Model-Templates

CHAPTER 7 Forms Form: Checkliste forms.py erstellen ModelForm für Model erstellen Update-View erstellen (display, save, errors) urls.py updaten Template erstellen forms.py und ModelsForm core/forms.py from django import forms from core.models import Contact class ContactForm(forms.ModelForm): class Meta: model = Contact fields = ['name'] Note: Man KANN jedes Feld einzeln definieren. Das machen wir aber nicht. 27

Form: die View Dazu core/views.py from core.forms import ContactForm def add_contact(request): context = RequestContext(request) if request.method == 'POST': form = ContactForm(request.POST, request.files) if form.is_valid(): form.save(commit=true) return index(request) else: print form.errors else: form = ContactForm() return render(request, 'add_contact.html', {'form': form}) Form: URL-Mapping core/urls.py url(r'^contact/$', views.add_contact, name='add_contact'), Form: Das Template <form id="cform" method="post" enctype="multipart/form-data"> {% csrf_token %} {% for hidden in form.hidden_fields %} {{ hidden }} {% endfor %} {% for field in form.visible_fields %} {{ field.errors }} {{ field.help_text }} {{ field }} {% endfor %} <input type="submit" name="submit" value="contact Me!" /> </form> Note: CSRF: https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/ 28 Chapter 7. Forms

CHAPTER 8 Outro Weitere Informationen https://docs.djangoproject.com http://www.tangowithdjango.com/ IRC / Github Danke Note: Good Bye! Wie man mich erreichen kann Privat: s@digitalkultur.net S&V: d.schwertel@s-v.de 29