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. 從頭開始的人工智慧專案、創意、Alive 日記
  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
登入後複製
登入後複製

需求.txt

但不一定是相同的版本,根據您的 Python 版本,您可以使用

手動安裝每個版本

pip 安裝 django

或建立需求文件並使用相同的舊

pip install -r requests.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”的項目,並在其中創建了三個應用程序,

  • 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 和 load_dotenv 從 .env 檔案載入變數。

load_dotenv()
登入後複製
登入後複製

從 .env 檔案載入變數

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

為 ALLOWED_HOSTS 新增了「*」以允許來自任何 IP 的連線。 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 應用程序,以及我們的三個應用程式: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 headers 設定加入到設定檔

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 驗證作為 Rest 框架庫的預設驗證類別。

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 金鑰作為 Secret Key,從 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!