ホームページ バックエンド開発 Python チュートリアル Django API プロジェクトのセットアップ

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

Oct 28, 2024 pm 07:04 PM

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. C:比較されたアプリケーションとユースケース Python vs. C:比較されたアプリケーションとユースケース Apr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

Python:ゲーム、GUIなど Python:ゲーム、GUIなど Apr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python vs. C:パフォーマンスと効率の探索 Python vs. C:パフォーマンスと効率の探索 Apr 18, 2025 am 12:20 AM

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか? Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか? Apr 27, 2025 am 12:03 AM

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

Pythonの学習:2時間の毎日の研究で十分ですか? Pythonの学習:2時間の毎日の研究で十分ですか? Apr 18, 2025 am 12:22 AM

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

See all articles