构建 Django 项目目录、文件和本地设置的最佳实践


Django 是一个 Web 框架,里面有很多文件和文件夹。适当的项目组织可以帮助保持项目干燥(不要重复自己)和清洁。组织一个项目是每个开发人员的必修课。这也有助于管理员和开发人员找到文件和文件夹的正确路径。有很多方法可以构建 Django 项目的目录和文件。


我喜欢组织我的 Django 项目的方式是 — 将所有 Django 应用程序保存在 apps 文件夹中,静态文件(脚本、js、CSS)保存在静态文件夹中,HTML 文件保存在模板文件夹中,图像和媒体内容保存在媒体文件夹中。

django_project
├── apps
│   └── app_1
│       ├── admin.py
│       ├── apps.py
│       ├── __init__.py
│       ├── migrations
│       │   └── __init__.py
│       ├── models.py│       ├── tests.py
│       └── views.py
├── /django_project(core)
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-35.pyc
│   │   └── settings.cpython-35.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── media
├── static
└── templates

创建一个 Django 项目

创建要在其中保存项目的文件夹。并打开目录。

mkdir my_project
cd my_project/

在该目录中,为您的 Django 项目创建一个虚拟环境并激活该虚拟环境。

python3 -m venv env
source env/bin/activate

它可能看起来像这样——(env) user@host:~/django_project$

现在是时候在你的虚拟环境中安装 Django 了。

pip3 install django

现在使用以下命令创建一个 Django 项目。

django-admin startproject django_project

这将创建名为“django_project”的 Django 项目和名称相同的 Django 主设置文件夹,名称为 'django_project'。这是 django 项目的正常方式。

或者,你可以用“setup”或“core”这样的名称更改 django 安装程序文件夹,只是为了更好地管理你的项目。为此,请使用以下命令创建一个 Django 项目。

> Django-admin startProject Core

这将创建名为“core”的 Django 项目和 Django 主设置文件夹,名称为 “core”。现在,通过右键单击并选择重命名,将项目名称重命名为“django_project”。或者使用以下命令。将项目根名称从“core”更改为“django_project”。

mv core django_project

现在你已经创建了 Django 项目,在同一目录中,你将创建应用程序、媒体、静态和模板文件夹。

mkdir static
mkdir media
mkdir templates
mkdir apps

通过选择文本编辑器/IDE打开django_project/设置.py。或使用以下命令打开它。

sudo nano django_project/settings.py

添加路径后,保存并退出文件。

创建 Django 项目应用程序

我更喜欢将 Django 应用程序视为可重用的模块或组件。这有助于我封装和分离某些功能,从而提高可重用性和可维护性。我的总体方法是将特定功能或功能集划分为“应用程序”。

要创建 Django 项目应用程序,您需要更改目录,为此您需要转到“apps”文件夹,然后在其中运行 startapp 命令。

cd apps/
django-admin startapp app_1

如果您在应用程序文件夹中注意到,您会在其中找到 app_1 文件夹。

现在,您已经创建了 app_1 应用程序,您需要在 settings.py 中注册它

要注册 Django 应用程序,请使用文本编辑器/IDE 打开 django_project/settings.py 并找到 INSTALLED_APPS 列表的定义。

sudo nano django_project/settings.py

将您创建的应用程序名称添加到 INSTALLED_APPS 列表。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'apps.app_1', # <--- here
]

让我分解一下,以帮助您更好地理解。 apps 是保存应用程序的文件夹名称应用程序,app_1 是新创建的应用程序名称。

提示——我喜欢为每个应用程序创建 urls.py。 它帮助我组织我的路线。 在您的主项目 urls.py 中包含您的应用程序的 urls.py。

配置本地设置文件

开发 Django 应用程序需要配置和设置。管理这些配置是项目的必要条件。我们必须为不同的环境(如测试、暂存、生产和开发)配置项目。管理默认配置和新配置非常重要。

Django 没有提供一种拥有单独配置的方法。所有与项目相关的配置都放在 settings.py 文件中。有几种方法可以满足上述要求,但是,我最喜欢的一种方法是具有不同的本地设置模块,并且所有内容都不同。

通过选择文本编辑器/IDE打开django_project/设置.py。或使用以下命令打开它。

sudo nano django_project/settings.py

分离 Django 应用程序定义 — INSTALLED_APPS

要启用应用程序,我们需要在INSTALLED_APPS设置中添加应用程序。应用程序可以是不同类型的,例如库、第三方应用程序、项目应用程序和默认应用程序。INSTALLED_APPS中添加的所有内容看起来都会令人困惑。

默认情况下,settings.py 中的INSTALLED_APPS将如下所示 –

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

为了解决上述问题,我找到了一个很好的技术。我们将分离默认应用、第三方应用和本地应用的列表。

为此,请将您的INSTALLED_APPS替换为以下内容–

DEFAULT_APPS = [
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
 ]
THIRD_PARTY_APPS =[
     # add apps which you install using pip
 ]
 LOCAL_APPS =[
     # add local apps which you create using startapp
 ]
 # Application definition
 INSTALLED_APPS = DEFAULT_APPS + THIRD_PARTY_APPS + LOCAL_APPS

分离 Django 数据库本地设置

项目首先在开发模式下创建和开发,然后切换到生产模式。项目转移到不同的环境和机器上。每个环境都有不同的数据库凭据和设置,因此每次都需要更改它。

为了避免代码中断和分隔本地数据库值,您将创建一个文件名并将其导入到文件中。local_settings.pysettings.py

从 settings.py 文件中删除数据库定义代码并将其添加到local_settings.py

# local_settings.py
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_shop', 
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '80',
    }
}

并在最后将local_settings.py文件导入 settings.py 文件中 –

# settings.py
# ...
# Loading from local_settings.py file
try:
    from django_shop.local_settings import *
except ImportError:
    pass

更改 Django 模板路径目录

不要将所有模板保留在 apps 文件夹下,而是创建一个单独的文件夹并将所有应用程序模板保留在该文件夹中。

在 manage.py 文件级别创建名为 templates 的模板文件夹。现在你已经创建了一个模板文件夹,你需要告诉你的 Django 项目关于那个模板路径。

编辑 TEMPLATES,在 TEMPLATES 中添加‘DIRS’键。 在 settings.py 中添加模板路径 'DIRS': [BASE_DIR + '/templates/',]。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR + '/templates/',], # <- here
        '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',
            ],
        },
    },
]

添加静态路径和媒体路径

为了使我们的静态文件和媒体文件能够提供服务,您需要将路径添加到我们的 settings.py 文件中。 确保将 django.contrib.staticfiles 添加到 INSTALLED_APPS,默认情况下它在那里。

在 settings.py 文件的末尾添加以下行。

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/STATIC_URL = '/static/'
STATICFILES_DIRS = (     
os.path.join(BASE_DIR, 'static'), 
) 
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

添加路径后,保存并退出文件。

注意——我们的媒体和静态文件夹位于 manage.py 文件级别。

您还可以在 GitHub 上查看完整的 settings.py 和local_settings.py文件。

收集静态文件

django.contrib.staticfiles 提供了一种在单个目录中收集静态文件的方法,因此您可以轻松地提供它们。 正如您在 STATIC_ROOT 路径上方设置的那样。 现在,一旦您运行 collectstatic 命令,它会将所有静态文件复制到 STATIC_ROOT 文件夹。

./manage.py collectstatic

它会给出这样的消息 — 119 个静态文件已复制到“django_project/static”。

现在你已经做到了。 要运行该项目,请转到主项目目录并运行以下命令:

./manage.py runserver

一些可以帮助您的示例 –

如何使用存储在模板文件夹中的HTML文件。

from django.views.generic.base import TemplateView
from articles.models import Article


class HomePageView(TemplateView):
    template_name = "home.html" # templates/home.html
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['latest_articles'] = Article.objects.all()[:5]
        return context

如何使用存储在静态文件夹中的模板中的静态文件

{% load static %}


   


  

Sample

就是这样,我希望这有所帮助。:)

展开阅读全文

页面更新:2024-04-01

标签:文件   项目   静态   应用程序   文件夹   路径   命令   模板   名称   环境   目录

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top