.. _cookbook_project: .. index:: single: Cookbook Projekt erstellen COOKBOOK 1: Erstellen eines neuen Projekts ******************************************************** Hier sind nochmal alle Schritte beschrieben, die wir zum Erstellen eines Projekts und zum Anlegen einer ersten App benötigen. Dieses Cookbook dient als Hilfe für alle eure zukünftigen Projekte. 0. Projektverzeichnis für alle Django-Projekte anlegen --------------------------------------------------------- Es gilt als gute Practice, alle lokalen Django-Projekte in einem Verzeichnis zu verwalten. Deshalb legen wir zuerst einmal ein ``Projekte-Verzeichnis`` an. .. code-block:: bash mkdir django_projects cd django_projects 1. Verzeichnis für alle virtuellen Environments anlegen ------------------------------------------------------------------ Jedes Django-Projekt erhält sein eigenes virtuelles Environment. Diese werden unter ``django_projects/.envs`` angelegt: .. code-block:: bash mkdir .envs So sieht unser Verzeichnis jetzt aus .. code-block:: bash ├── django_projects └── .envs └──eventenv falls ein anderes, virtuelles Environment aktiv sein sollte, dieses jetzt deaktivieren .. code-block:: bash (petenv) deactivate und das Environment aktivieren: .. code-block:: bash source .envs/eventenv/bin/activate #der Windows .envs\eventenv\Scripts\activate 2. Projektverzeichnis erstellen --------------------------------- Wir erstellen nun für unser neues Projekt ein ``Projektverzeichnis`` und wechseln auch gleich hinein. Unser Django-Projekt heisst ``event_project``: .. code-block:: bash (eventenv) mkdir event_project (eventenv) cd event_project 2. requirements-Dateien anlegen --------------------------------- Wir legen in diesem Verzeichnis mit unserem Editor die ``requirements.in`` und die ``requirements-dev.in`` an. Optional können wir dort gleich eine ``README.md`` und ``.gitignore``- Datei anlegen: .. code-block:: bash ├── django_projects └── event_project ├── README.md ├── .gitignore ├── .requirements.in ├── .requirements-dev.in └── .envs └──eventenv 3. Django installieren --------------------------------- in die ``requirements.in`` schreiben wir die nötigen Pakete: .. code-block:: bash Django==stable.3 in die ``requirements-dev.in`` schreiben wir d nötigen Pakete: .. code-block:: bash Django==stable.3 und installieren diese auf der Shell: .. code-block:: shell (eventenv) pip install pip-tools (eventenv) pip-compile requirements.in (eventenv) pip-compile requirements-dev.in 4. ein Django-Projekt erstellen --------------------------------- Nach der Installation steht uns der django-admin zur Verfügung. Mit diesem erstellen wir ein neues Django-Projekt: .. code-block:: bash (eventenv) pwd django_projects/event_project (eventenv) django-admin startproject event_manager Es wird die Dateistruktur angelegt. Nun gibt es ein äußeres und ein inneres ``event_manager``-Verzeichnis. .. code-block:: bash event_project └── event_manager ├── manage.py └── event_manager ├── __init__.py ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py Hinweis: alle zukünftigen Pfadangaben gehen ab jetzt von ``event_project`` aus. Die ``settings.py`` liegt also unter ``event_manager/event_manager/settings.py``. 5. Settings anpassen --------------------------------- Wir wollen gleich die ``settings.py`` anpassen und nehmen dort die folgenden, wichtigsten Änderungen vor: .. code-block:: python ALLOWED_HOSTS = ["127.0.0.1"] LANGUAGE_CODE = 'de-DE' TIME_ZONE = "Europe/Berlin" USE_I18N = True USE_L10N = True USE_TZ = True 6. Runserver auf der Shell starten -------------------------------------- Um den Testserver zu starten, benötigen wir folgendes Kommando: .. code-block:: bash (eventenv) python manage.py runserver Die Website im Browser aufrufen, die Rakete muss fliegen: ``http://127.0.0.1:8000`` 7. App erstellen --------------------------------- Um eine erste App anzulegen, nutzen wir das Subkommando ``startapp``. .. code-block:: bash (eventenv) python manage.py startapp events Es wurden ein paar Dateien in einem App-Verzeichnis erstellt. So sieht unser Verzeichnis aktuell aus: .. code-block:: bash event_manager ├── manage.py ├── db.sqlite3 ├── events ├── migrations/ ├── __init__.py ├── admin.py ├── apps.py ├── models.py ├── tests.py ├── views.py └── event_manager ├── __init__.py ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py Nun registrieren wir die neu erstellte App ``events``auch gleich in den ``event_manager/event_manager/settings.py``. .. code-block:: python INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "whitenoise.runserver_nostatic", "events", ] 1. URLs anlegen --------------------------------- Wir wollen jetzt eine TestView schreiben und die nötigen URLs dafür anlegen. Dies geschieht in der ``urls.py`` des Projekts und in der ``urls.py`` der App. a) Pfad zur App registrieren ............................................. Unter ``event_manager/event_manager/urls.py`` legen wir den folgenden Code an und verweisen auf die Urls der App ``events``, die es aktuell allerdings noch gar nicht gibt: .. code-block:: python from django.urls import path, include urlpatterns = [ path("admin/", include("admin.urls")) path("events/", include("events.urls")), # <= HIER eintragen! ] b) Die Pfade der App anlegen ............................................. Wir erstellen die Datei ``event_manager/events/urls.py`` und fügen folgenden Code ein: .. code-block:: python from django.urls import path from . import views urlpatterns = [ path('hello/', views.hello, name='hello'), ] Der Pfad verweist auf eine nicht existente Funktion ``hello``. Diese müssen wir noch anlegen. 9. VIEWS anlegen --------------------------------- Unter ``event_manager/events/views.py`` legen wir jetzt die erste View an: .. code-block:: python from django.http import HttpResponse def hello(request): return HttpResponse('hello!') 10. RUNSERVER starten und View testen --------------------------------------- .. code-block:: bash (eventenv) python manage.py runserver Und View aufrufen: ``http://127.0.0.1:8000/events/hello`` Im Browser sollte nun klein das Wort ``hello!`` stehen.