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 密钥,并使用您的电子邮件帐户发送验证电子邮件。
使用谷歌帐户发送电子邮件是可能的,但不推荐。设置应该像

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学习者快速成长!