最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Day7 : 探討 INSTALLED_APPS

XAMPP下载 admin 846浏览 0评论
 邁入Day7! 今天就來些輕鬆一點的內容吧

今天我們來談談在 Day5 提到的 INSTALLED_APPS 內的寫法,其實也蠻tricky的這個議題

如果你依稀記得 Day6 的 vendor,要 Django 追蹤的方法就是將 vendor.apps.VendorConfig,加入 INSTALLED_APP

到這裡都沒有問題!

但是小弟我剛開始在學的時候,參考的來源不只一個網站,然後發現大家寫法不同,但是卻都能夠執行!

這是什麼意思呢? 也就是說 Day6 的 INSTALLED_APP,你可以這樣寫

INSTALLED_APPS = [
‘vendor’,
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
]
你可以使用更簡單的寫法 app name – 也就是將 vendor.apps.VendorConfig 替換成 vendor

阿你就會開始疑惑說 : 這麼簡單的寫法為什麼不直接告訴我就好了!!

沒有不告訴你啊,剛剛不是講了嗎 ^^”

A list of strings designating all applications that are enabled in this Django installation. Each string should be a dotted Python path to:

an application configuration class (preferred)
a package containing an application
所以說,其實這兩種寫法都可以,但是推薦你使用 vendor.apps.VendorConfig

這也算是 版本演化 下的一個產物

在 Django 1.9以前,下 python manage.py

startapp [someapps]是不會自動產生 apps.py

在該app資料夾底下的,而你去打開 vendor 底下的 apps.py

便可以看到

from django.apps import AppConfig

class VendorConfig(AppConfig):
name = ‘vendor’
而上述的敘述要搭配著下面這一段文字看

When INSTALLED_APPS simply contains the dotted path to an application module, Django checks for a default_app_config variable in that module.
If it’s defined, it’s the dotted path to the AppConfig subclass for that application.
If there is no default_app_config, Django uses the base AppConfig class.

也就是說,我們託付給 Django 管理 apps,它的運作模式就是去看該路徑是否有 default_app_config 這個變數,如果有這個變數,才會繼續去看後面所接的路徑,很抽象對吧,直接帶你看一個例子

我們來到內部的 ithome\settings.py

,來追 INSTALLED_APPS 的設定 django.contrib.admin

該檔案在虛擬環境 Django 套件下
cd .(你的目錄).\ithome\ithome_enve\Lib\site-packages\django\contrib\admin

省略部分內容 …
def autodiscover():
autodiscover_modules(‘admin’, register_to=site)

default_app_config = ‘django.contrib.admin.apps.AdminConfig’
在 __init__.py 你便可以看到這個設定,抓到 default_app_config,我們再繼續追 apps.AdminConfig

from django.apps import AppConfig
from django.contrib.admin.checks import check_admin_app, check_dependencies
from django.core import checks
from django.utils.translation import gettext_lazy as _

class SimpleAdminConfig(AppConfig):
…省略

class AdminConfig(SimpleAdminConfig):
“””The default AppConfig for admin which does autodiscovery.”””

def ready(self):
super().ready()
self.module.autodiscover()
trace到這邊,相信大家就會很明瞭了 ^^

大致上就是這樣,文章上面也強調,這是時代下演化出的產物,所以在 Django 1.7 以前這些內容都已經固定了,所以這些功能就只是取決於我們要不要使用,而不用去動它們

但是現在呢

New applications should avoid default_app_config. Instead they should require the dotted path to the appropriate AppConfig subclass to be configured explicitly in INSTALLED_APPS.

我們應該避免使用單純 app 的名稱,或是在 __init__.py 建立default_app_config = vendor.apps.VendorConfig

而是採用更明確的方式,在 settings.py

的 INSTALLED_APPS 加入 [someapp].apps.[SomeApps]Config

當然, INSTALLED_APP 還有更多功能可以玩,不過今天主軸擺在 探討 INSTALLED_APPS

希望這篇內容能夠釐清也在這探討INSTALLED_APPS寫法的人^^

參考資源
釐清polls.apps.PollsConfig 及 polls (1)
釐清polls.apps.PollsConfig 及 polls (2)

stackoverflow裡有無數的巨人,而自己也朝著成為巨人的路邁進 From BY

转载请注明:XAMPP中文组官网 » Day7 : 探討 INSTALLED_APPS

您必须 登录 才能发表评论!