2016-06-28 2 views
16

이 질문은 이전 요청되었습니다 What is the purpose of apps.py in Django 1.9?Django에서 apps.py의 목적은 무엇입니까?

응용 프로그램 구성은 응용 프로그램에 대한 메타 데이터를 저장하는 객체. 일부 속성은 AppConfig 하위 클래스에서 구성 할 수 있습니다. 다른 것들은 Django와 읽기 전용으로 설정됩니다.

그러나 애플리케이션의 메타 데이터는 무엇을 의미합니까? 그것은 AppConfig metadata:name, verbose_name, path, label, module, models_module에만 국한되어 있습니까? 다음과 같이

아니면가이 확장 의미가 않습니다 우리가 날짜 형식 구성이 blog 응용 예를 들면, 특히 응용 프로그램 특정 메타 데이터, 미리 정의 된 메타 데이터를 beyonds, 일반적 정의 :

# File: settings.py 
BLOG = { 
    'DATE_FORMAT': 'ddMMYYY', 
} 

하는

# File: blog/<...>.py 
from django.conf import settings 
date_format = settings.BLOG['DATE_FORMAT'] 

반대로, 우리가이 설정을 이동할 수 있습니다 : 그것은 다음과 같이 사용되는 uration을 blog/apps.py으로 BlogConfig?

class BlogConfig(AppConfig): 
    name = 'blog' 
    verbose_name = 'Awesome Blog' 
    date_format = 'ddMMYYYY' 

그래서 응용 프로그램의 코드 전역을

date_format에 의해 사용되는 :

# File: blog/<...>.py 
from django.apps import apps 
date_format = apps.get_app_config('blog').date_format 

settings.py프로젝트 설정 것을 나에게 소리가 아닌 응용 프로그램 설정. 따라서 모든 응용 프로그램 설정을 apps.py, 그 다음은 settings.py으로 설정하는 것이 좋습니다. 그렇다면 settings.py 대신 내부에 응용 프로그램 구성을 넣을 수있는 유효한 가정/인수/규칙이 있습니까?

답변

3

프로젝트는 django 설치마다 고유하며 응용 프로그램은 재사용 가능해야합니다.

사용자 정의 앱 설정을 프로젝트 settings.py에 넣으면 수정 가능해야합니다. 특히 사용자 (또는 다른 사용자)가이 프로젝트를 다른 프로젝트에 다시 사용하는 경우 더욱 그렇습니다.

이제 이러한 맞춤 설정을 앱의 apps.py에 넣으면 이는 프로젝트별로 수정할 수 없음을 의미합니다. 어떤 경우에는 constants 서브 모듈 대신에 apps.py에 넣을 이유가 없습니다. 당신이 가능 CONFIGS의 제한된 집합을 제공하고자하지 않는 :

class BlogConfig(AppConfig): 
    name = 'blog' 
    verbose_name = "Blog" 
    date_format = 'ddMMYYYY' 


class CustomizableDateFormatBlogConfig(BlogConfig): 
    date_format = getattr(settings, 'BLOG_DATE_FORMAT', BlogConfig.date_format) 


class I18nBlogConfig(BlogConfig) 
    verbose_name = _("Blog") 

default_app_configBlogConfig 될하지만 응용 프로그램을 사용하여 프로젝트는 CustomizableDateFormatBlogConfig 또는 I18nBlogConfig도를 선택할 수있을 것입니다.

그러나 이렇게하면 맞춤 설정이 거의 불가능한 앱이됩니다.당신이 수 있도록하려면 위의 예에서, 응용 프로그램 사용자가 모두 CustomizableDateFormatBlogConfigI18nBlogConfig 사용, 당신은 같은 것을 할 필요가있을 것이다 :

class BlogConfig(AppConfig): 
    name = 'blog' 
    verbose_name = "Blog" 
    date_format = 'ddMMYYYY' 


class CustomizableDateFormatMixin: 
    date_format = getattr(settings, 'BLOG_DATE_FORMAT', BlogConfig.date_format) 


class I18nMixin: 
    verbose_name = _("Blog") 


class CustomizableDateFormatBlogConfig(CustomizableDateFormatMixin, BlogConfig): 
    pass 


class I18nBlogConfig(I18nMixin, BlogConfig): 
    pass 


class I18nCustomizableDateFormatBlogConfig(I18nMixin, CustomizableDateFormatMixin, BlogConfig): 
    pass 

그래서, 따로 특별한 경우를 당신은 몇 가지의 세트를 제공하기 위해 필요로하는 곳에 app configs를 사용하면 사용자 정의 앱 설정을 프로젝트 settings.py에 넣는 것이 좋습니다.

관련 문제