好吧,让我们开始编码吧!这是介绍 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
需求.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”的项目,并在其中创建了三个应用程序,
我们将在 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 密钥,并使用您的电子邮件帐户发送验证电子邮件。
使用谷歌帐户发送电子邮件是可能的,但不推荐。设置应该像
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中文网其他相关文章!