Heim  >  Artikel  >  Backend-Entwicklung  >  Django API-Projekt-Setup

Django API-Projekt-Setup

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-28 19:04:29752Durchsuche

Django API Project Setup

Was können Sie von diesem Artikel erwarten?

Nun, fangen wir mit dem Codieren an! Dies ist der erste Codierungsartikel, nachdem wir die Idee von Alive Diary vorgestellt und bewiesen haben, dass Zwillinge die Seele sein können. Wir werden mit der Codierung des Backends mit Django beginnen.
Um Ordnung zu schaffen, werde ich das Projekt in mehreren Artikeln besprechen, also in diesem Artikel

  • deckt den Projekteinrichtungsprozess ab.
  • wird die verwendeten Bibliotheken vorstellen und warum wir sie verwenden.
  • wird die Apps erstellen und die Logik dahinter erklären.

Ich werde versuchen, so viele Details wie möglich abzudecken, ohne Sie zu langweilen, aber ich erwarte dennoch, dass Sie mit einigen Aspekten von Python und Django vertraut sind.

Die endgültige Version des Quellcodes finden Sie unter https://github.com/saad4software/alive-diary-backend

Serienbestellung

Schauen Sie sich bei Interesse frühere Artikel an!

  1. KI-Projekt von Grund auf, die Idee, lebendiges Tagebuch
  2. Beweisen Sie, dass es mit Google AI Studio machbar ist
  3. Django API-Projekt-Setup (Sie sind hier?)

Projekt starten!

Nach der Installation von Python und dem Einrichten einer virtuellen Umgebung, die zu Ihrem Betriebssystem passt. Stellen Sie sicher, dass Sie diese Bibliotheken installieren

Django==4.2.16          # it is django itself!
django-cors-headers==4.4.0  # avoid cors-headers issues
django-filter==24.3     # easily filter text fields 
djangorestframework==3.15.2 # rest framework!
djangorestframework-simplejwt==5.3.1    # JWT token
pillow==10.4.0          # for images
python-dotenv==1.0.1        # load config from .env file
google-generativeai==0.7.2  # google api
ipython==8.18.1         # process gemini responses
django-parler==2.3              # multiple languages support
django-parler-rest==2.2         # multi-language with restframework

requirements.txt

Es muss jedoch nicht dieselbe Version sein. Abhängig von Ihrer Python-Version können Sie jede Version manuell mit

installieren

pip install django

Oder erstellen Sie die Anforderungsdatei und verwenden Sie dieselbe alte

pip install -r require.txt

Sobald Django und die Bibliotheken installiert sind, können wir unser Projekt starten

django-admin startproject alive_diary
cd alive_diary
python manage.py startapp app_account
python manage.py startapp app_admin
python manage.py startapp app_main

Wir haben ein Projekt namens „alive_diary“ erstellt und darin drei Apps erstellt,

  • app_account: zum Verwalten der wesentlichen Kontodaten der Benutzer, zur Registrierung, Anmeldung, zum Ändern des Passworts, zur Überprüfung der Konto-E-Mail-Adresse und für ähnliche Aufgaben.
  • app_admin: für administrative Aufgaben, hauptsächlich Benutzerverwaltung für diese einfache App
  • app_main: für die Haupt-App.

Wir werden eine minimale Abhängigkeit zwischen Django-Apps beibehalten, um sie in anderen Projekten wiederverwendbar zu machen.

Einstellungen

Kurz gesagt, dies ist die endgültige Einstellungsdatei. Gehen wir sie schnell durch.

import os
from datetime import timedelta
from pathlib import Path
from dotenv import load_dotenv

Wir haben timedelta aus dem datetime-Paket verwendet, um die JWT-Lebensdauer festzulegen, os und load_dotenv, um Variablen aus der .env-Datei zu laden.

load_dotenv()

Variablen aus der .env-Datei laden

BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = True
ALLOWED_HOSTS = ['*']

‘*‘ für ALLOWED_HOSTS hinzugefügt, um eine Verbindung von jeder IP aus zu ermöglichen. os.getenv ruft den Schlüsselwert aus der .env-Datei ab.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'django_filters',
    'app_account',
    'app_admin',
    'app_main',
]

Die Apps „corsheaders“, „rest_framework“ und „django_filters“ sowie unsere drei Apps „app_account“, „app_admin“ und „app_main“ wurden hinzugefügt.

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Vergessen Sie nicht, die CorsMiddleware-Middleware vor der CommonMiddleware hinzuzufügen

Django==4.2.16          # it is django itself!
django-cors-headers==4.4.0  # avoid cors-headers issues
django-filter==24.3     # easily filter text fields 
djangorestframework==3.15.2 # rest framework!
djangorestframework-simplejwt==5.3.1    # JWT token
pillow==10.4.0          # for images
python-dotenv==1.0.1        # load config from .env file
google-generativeai==0.7.2  # google api
ipython==8.18.1         # process gemini responses
django-parler==2.3              # multiple languages support
django-parler-rest==2.2         # multi-language with restframework

Cors-Header-Konfiguration zur Einstellungsdatei hinzufügen

django-admin startproject alive_diary
cd alive_diary
python manage.py startapp app_account
python manage.py startapp app_admin
python manage.py startapp app_main

Verwenden Sie die einfache JWT-Authentifizierung als Standardauthentifizierungsklasse für die Rest-Framework-Bibliothek.

import os
from datetime import timedelta
from pathlib import Path
from dotenv import load_dotenv

Ändern Sie die Standardbenutzerklasse in eine benutzerdefinierte von app_account. Wir haben dieses Modell noch nicht erstellt.

load_dotenv()

Unterstützte Sprachen hinzugefügt und Ordner für Dateien und Statiken festgelegt

BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = True
ALLOWED_HOSTS = ['*']

E-Mail-Einstellungen für den E-Mail-Verifizierungsprozess. Wir laden sie aus der .env-Datei.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'django_filters',
    'app_account',
    'app_admin',
    'app_main',
]

Einfache JWT-Token-Einstellungen: Wir legen die Lebensdauer des Zugriffstokens „ACCESS_TOKEN_LIFETIME“ auf 8 Stunden und die Lebensdauer des Aktualisierungstokens „REFRESH_TOKEN_LIFETIME“ auf 5 Tage fest. Wir rotieren das Aktualisierungstoken (senden neues Aktualisierungstoken mit jeder Aktualisierungstokenanforderung) „ROTATE_REFRESH_TOKENS“ und verwenden das „Bearer“-Header-Präfix für die Authentifizierung „AUTH_HEADER_TYPES“.

Die Umgebungsdatei

Die verwendeten Variablen in der .env-Datei sollten
sein

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Stellen Sie die Werte entsprechend Ihrem Projekt ein. Sie können den generierten Django-Geheimschlüssel als Geheimschlüssel verwenden, den Google Gemini-API-Schlüssel von AI Studio erhalten und Ihr E-Mail-Konto für Bestätigungs-E-Mails verwenden.
Die Verwendung eines Google-Kontos zum Senden von E-Mails ist möglich, wird jedoch nicht empfohlen. Die Einstellungen sollten wie folgt lauten:

ROOT_URLCONF = 'alive_diary.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'alive_diary.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

STATIC_URL = '/static/'

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

# CORS HEADERS
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

und der Benutzer sollte „Weniger sichere Apps“ aktivieren, um auf das Gmail-Konto zuzugreifen. Wie auch immer, wir können zuerst das Ganze bauen und uns später darum kümmern. Ignorieren Sie vorerst einfach den Teil zur E-Mail-Bestätigung.

Abschließen

Um das Projekt ausführen und diesen Artikel fertigstellen zu können, erstellen wir ein Benutzermodell in app_account/models.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

So einfach ist das! (Wir werden im nächsten Artikel daran arbeiten) Lasst uns Migrationen durchführen und migrieren

AUTH_USER_MODEL = 'app_account.User'

Wenn alles gut gelaufen ist, sollten Sie das Projekt jetzt ausführen können

LANGUAGES = [
    ('en', 'English'),
    ('ar', 'Arabic')
]

STATICFILES_DIRS = [os.path.join(BASE_DIR, "app_main", "site_static")]
STATIC_ROOT = os.path.join(BASE_DIR, "app_main", "static")
MEDIA_ROOT = os.path.join(BASE_DIR, "app_main", "media")
MEDIA_URL = "/app_main/media/"

Bitte teilen Sie mir Ihr Problem mit. Wir sind jetzt bereit, mit der Arbeit an den Projekt-Apps zu beginnen!

Und das ist es!

Der nächste Artikel sollte sich mit app_account, der Benutzerverwaltungs-App, befassen. Er umfasst Benutzerverwaltung, Anmeldung, Registrierung, Passwort ändern, Passwort vergessen, Kontobestätigung und andere benutzerbezogene Aktionen, die wir in den meisten Apps benötigen.

Bleiben Sie dran ?

Das obige ist der detaillierte Inhalt vonDjango API-Projekt-Setup. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn