天天看點

建構 Django 項目目錄、檔案和本地設定的最佳實踐

作者:洞見每一天的精彩

Django 是一個 Web 架構,裡面有很多檔案和檔案夾。适當的項目組織可以幫助保持項目幹燥(不要重複自己)和清潔。組織一個項目是每個開發人員的必修課。這也有助于管理者和開發人員找到檔案和檔案夾的正确路徑。有很多方法可以建構 Django 項目的目錄和檔案。

建構 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 %}
<html>
<head>
  <link rel="stylesheet" href="{% static 'app.css' %}"> <!-- static/app.css -->
</head>
<body>
  <h1>Sample</h1>
  <script src="{% static 'app.js' %}"></script> <!-- static/app.js -->
</body>
</html>           

就是這樣,我希望這有所幫助。:)