さて、コーディングを始めましょう!これは、Alive Diary のアイデアを紹介し、Gemini が魂になり得ることを証明した後の最初のコーディング記事です。Django を使用してバックエンドのコーディングを開始します。
整理のため、このプロジェクトについては複数の記事に分けて説明しますので、この記事は
読者を飽きさせないように、できるだけ多くの詳細を説明するよう努めますが、Python と Django のいくつかの側面についてはよく知っていることを期待しています。
ソース コードの最終バージョンは https://github.com/saad4software/alive-diary-backend にあります
興味があれば過去の記事をチェックしてください!
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 つのアプリを作成しました。
他のプロジェクトで再利用できるように、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 サイトの他の関連記事を参照してください。