Database

Das erste Model

../_images/project_orm.png

Datenbank

  • PostgreSQL
  • MySQL
  • SQLite
  • Oracle
  • (MSSQL)
  • (NOSQL)

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

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

Datenbank erstellen

$ python manage.py migrate

$ python manage.py makemigrations core

$ python manage.py migrate

Shell debugging

$ 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


class:slidecenter

django Admin

Note

Der Admin funktioniert über Introspection im Gegensatz zu zum Beispiel Ruby on Rails.


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

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 …