Django API プロジェクトのセットアップ

Mary-Kate Olsen
リリース: 2024-10-28 19:04:29
オリジナル
751 人が閲覧しました

Django API Project Setup

この記事から何を期待できるでしょうか?

さて、コーディングを始めましょう!これは、Alive Diary のアイデアを紹介し、Gemini が魂になり得ることを証明した後の最初のコーディング記事です。Django を使用してバックエンドのコーディングを開始します。
整理のため、このプロジェクトについては複数の記事に分けて説明しますので、この記事は

  • プロジェクトのセットアッププロセスについて説明します。
  • 使用されているライブラリと、それらを使用する理由を紹介します。
  • アプリを作成し、その背後にあるロジックを説明します。

読者を飽きさせないように、できるだけ多くの詳細を説明するよう努めますが、Python と Django のいくつかの側面についてはよく知っていることを期待しています。

ソース コードの最終バージョンは https://github.com/saad4software/alive-diary-backend にあります

シリーズの順序

興味があれば過去の記事をチェックしてください!

  1. ゼロから作る AI プロジェクト、アイデア、生きた日記
  2. Google AI Studio で実現可能であることを証明してください
  3. Django API プロジェクトのセットアップ (ここにいますか?)

プロジェクトスタート!

Python をインストールし、オペレーティング システムに適した仮想環境をセットアップした後。これらのライブラリを必ずインストールしてください

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

同じバージョンである必要はありませんが、Python のバージョンに応じて、

を使用してそれぞれを手動でインストールできます。

pip install django

または要件ファイルを作成し、同じ古​​いファイルを使用します

pip install -r required.txt

django とライブラリがインストールされたら、プロジェクトを開始できます

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
ログイン後にコピー
ログイン後にコピー

「alive_diary」というプロジェクトを作成し、その中に 3 つのアプリを作成しました。

  • app_account: ユーザーの重要なアカウント データ、登録、ログイン、パスワードの変更、アカウントの電子メールの確認、および同様の責任を管理します。
  • app_admin: 管理関連のタスク用。主にこの単純なアプリのユーザーを管理します
  • app_main: メインアプリ用。

他のプロジェクトで再利用できるように、Django アプリ間の依存関係を最小限に抑えます。

設定

つまり、これが最終設定ファイルです。早速見ていきましょう

import os
from datetime import timedelta
from pathlib import Path
from dotenv import load_dotenv
ログイン後にコピー
ログイン後にコピー

datetime パッケージの timedelta を使用して、JWT ライフタイム、os、および .env ファイルから変数をロードするload_dotenv を設定しました。

load_dotenv()
ログイン後にコピー
ログイン後にコピー

.env ファイルから変数をロードします

BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = True
ALLOWED_HOSTS = ['*']
ログイン後にコピー
ログイン後にコピー

任意の IP からの接続を許可するために、ALLOWED_HOSTS に「*」を追加しました。 os.getenv .env ファイルからキー値を取得します。

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',
]
ログイン後にコピー
ログイン後にコピー

corsheaders、rest_framework、django_filters アプリと、3 つのアプリ、app_account、app_admin、app_main を追加しました。

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',
]
ログイン後にコピー
ログイン後にコピー

CommonMiddleware の前に CorsMiddleware ミドルウェアを追加することを忘れないでください

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 ヘッダー構成を追加します

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
ログイン後にコピー
ログイン後にコピー

残りのフレームワーク ライブラリのデフォルトの認証クラスとして単純な JWT 認証を使用します。

import os
from datetime import timedelta
from pathlib import Path
from dotenv import load_dotenv
ログイン後にコピー
ログイン後にコピー

デフォルトのユーザー クラスを app_account からカスタム クラスに変更します。このモデルはまだ作成していません。

load_dotenv()
ログイン後にコピー
ログイン後にコピー

サポートされる言語を追加し、ファイルと静的データのフォルダーを設定しました

BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = True
ALLOWED_HOSTS = ['*']
ログイン後にコピー
ログイン後にコピー

電子メール設定、電子メール検証プロセス用。 .env ファイルからロードしています。

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',
]
ログイン後にコピー
ログイン後にコピー

簡単な JWT トークンの設定。アクセス トークン「ACCESS_TOKEN_LIFETIME」の有効期間を 8 時間、リフレッシュ トークンの有効期間「REFRESH_TOKEN_LIFETIME」を 5 日に設定しています。リフレッシュ トークンをローテーションします (リフレッシュ トークン リクエストごとに新しいリフレッシュ トークンを送信します) 「ROTATE_REFRESH_TOKENS」、認証に「Bearer」ヘッダー プレフィックス「AUTH_HEADER_TYPES」を使用します。

環境ファイル

.env ファイルで使用される変数は次のとおりです

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',
]
ログイン後にコピー
ログイン後にコピー

プロジェクトに応じて値を設定します。秘密キーには生成された Django 秘密キーを使用し、AI Studio から Google Gemini API キーを取得し、確認メールにはメール アカウントを使用できます。
Google アカウントを使用してメールを送信することも可能ですが、お勧めしません。設定は次のようになります

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
ログイン後にコピー

そしてユーザーは Gmail アカウントにアクセスするために「安全性の低いアプリ」を有効にする必要があります。とにかく、最初に全体を構築して、これについては後で考えることができます。現時点では、メール認証の部分は無視してください。

結論する

プロジェクトを実行してこの記事を終えるために、app_account/models.py にユーザー モデルを作成しましょう

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}
ログイン後にコピー

とても簡単です! (次の記事で取り組む予定です) マイグレーションを行って移行しましょう

AUTH_USER_MODEL = 'app_account.User'
ログイン後にコピー

すべてがうまくいけば、
までにプロジェクトを実行できるはずです。

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

ログイン後にコピー

何か問題があれば私と共有してください。プロジェクト アプリの開発を開始する準備が整いました。

それがそれです!

次の記事では、ユーザー管理アプリ app_account について説明します。これには、ユーザー管理、ログイン、登録、パスワード変更、パスワードを忘れた場合、アカウント確認、およびほとんどのアプリで必要なその他のユーザー関連のアクションが含まれます。

乞うご期待?

以上がDjango API プロジェクトのセットアップの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!