Django API-Projekt-Setup

Mary-Kate Olsen
Freigeben: 2024-10-28 19:04:29
Original
751 Leute haben es durchsucht

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
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

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()
Nach dem Login kopieren
Nach dem Login kopieren

Variablen aus der .env-Datei laden

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

‘*‘ 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',
]
Nach dem Login kopieren
Nach dem Login kopieren

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',
]
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

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

load_dotenv()
Nach dem Login kopieren
Nach dem Login kopieren

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 = ['*']
Nach dem Login kopieren
Nach dem Login kopieren

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',
]
Nach dem Login kopieren
Nach dem Login kopieren

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',
]
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren

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',
    ],
}
Nach dem Login kopieren

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'
Nach dem Login kopieren

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/"

Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!