使用任何django项目时的一些基本工具

raphendyr-django-essentials的Python项目详细描述


很少有使用django web框架的必要补充。 换言之,我总是把我一直在做的每一个项目的资料都复制过来。

设置管理

模块conf包含hwlp使用django的工具settings.py。 最重要的部分包括local_settings.py和在secret_key.py中创建SECRET_KEY。 此外,还将包含以DJANGO_开头的环境变量(解析为json)以覆盖设置(例如对heroku很有用)。

settings.py末尾添加以下内容:

fromr_django_essentials.confimportupdate_settingsupdate_settings(__name__)

这基本上与:

fromr_django_essentials.confimport*# second argument is optional for all except firts. Default is shown here.update_settings_from_module(__name__,'local_settings')update_secret_from_file(__name__,'secret_key')update_settings_from_environment(__name__,'DJANGO_')update_installed_apps(__name__,'required_apps')update_context_processors_from_apps(__name__,'context_processors')use_cache_template_loader_in_production(__name__)

有关详细信息,请参阅conf.py

密钥自动生成

应用程序的每个安装都应该使用它自己随机生成的SECRET_KEY。 要帮助完成此任务,如果设置未提供新密钥,则可以使用此功能自动创建新密钥。

要使用此功能,您的settings.py需要执行以下操作之一:

# Include SECRET_KEY from secret_key.py into settingsfromr_django_essentials.confimportupdate_secret_from_fileupdate_secret_from_file(__name__,'secret_key')
# update_settings will call above function as part of it's workfromr_django_essentials.confimportupdate_settingsupdate_settings(__name__)
如果文件存在的话,这将加载选项,如果不存在,将创建新文件。

请记住将myproject/secret_key.py添加到.gitignore中,因为您的版本控制中不应该有SECRET_KEY

django应用程序依赖项

django不支持依赖于另一个django应用程序,但有时仍然非常有用。 为了维护web应用程序,不要滥用这个系统,包括复杂的django应用程序。 此功能最好用于包括模板库和资产库(分布式ass django应用程序)。

要使用此功能,您的settings.py需要执行以下操作之一:

# Just expand the apps dependenciesfromr_django_essentials.confimportexpand_required_appsINSTALLED_APPS=expand_required_apps(INSTALLED_APPS)
# Do same as above, but manipulate settings modulefromr_django_essentials.confimportupdate_installed_appsupdate_installed_apps(__name__)
# update_settings will call above function as part of it's workfromr_django_essentials.confimportupdate_settingsupdate_settings(__name__)

既然settings.py正在调用正确的函数,您需要在应用程序中添加如下内容AppConfig

# myapp/apps.pyfromdjango.appsimportAppConfigclassMyAppConfig(AppConfig):name='myapp'verbose_name='My example app'required_apps=['django.contrib.staticfiles','django.contrib.humanize',]

这些应用程序将由上述设置片段之一添加到INSTALLED_APPS

所需的上下文处理器

与应用程序依赖项类似,此功能从AppConfig填充模板引擎context_processors列表。

要使用此功能,您的settings.py需要执行以下操作之一:

# Just update TEMPLATES list of dictionariesfromr_django_essentials.confimportadd_required_context_processorsadd_required_context_processors(TEMPLATES,INSTALLED_APPS)
# Do same as above, but manipulate settings modulefromr_django_essentials.confimportupdate_context_processors_from_appsupdate_context_processors_from_apps(__name__)
# update_settings will call above function as part of it's workfromr_django_essentials.confimportupdate_settingsupdate_settings(__name__)

在你的应用中AppConfig你会得到这样的东西:

# myapp/apps.pyfromdjango.appsimportAppConfigclassMyAppConfig(AppConfig):name='myapp'verbose_name='My example app'context_processors='myapp.context_processors.myapp_context_processor'# orcontext_processors=('myapp.context_processors.myapp_context_processor1','myapp.context_processors.myapp_context_processor2',)

上面将把上下文处理器添加到django模板引擎选项中。 如果需要为不同的后端添加上下文处理器, 然后使用带有后端的dictionary作为键,使用处理器列表作为值。

不推荐的警告

需要在没有好的弃用系统的情况下将函数标记为弃用?

fromr_django_essentials.deprecationimportdeprecated@deprecated("my_function is deprecated, use my_new_function instead")defmy_function(argument):returnmy_new_function(argument)

彩色日志格式化程序

要用不同颜色对不同的日志源进行颜色编码吗?

在你的settings.py

OGGING={'version':1,'disable_existing_loggers':False,'formatters':{'colored':{'()':'r_django_essentials.logging.SourceColorizeFormatter','format':'[%(asctime)s: %(levelname)8s%(name)s] %(message)s','colors':{'django.db.backends':{'fg':'cyan'},'myapp':{'fg':'red'},},},},'handlers':{'debug_console':{'level':'DEBUG','class':'logging.StreamHandler','stream':'ext://sys.stdout','formatter':'colored',},},'loggers':{'':{'level':'DEBUG','handlers':['debug_console'],'propagate':True},},}

枚举模型中的选项

轻松创建枚举,该枚举与django中的choices字段配合良好。

在你的models.py

fromdjango.dbimportmodelsfromdjango.utils.translationimportugettext_lazyas_fromr_django_essentials.fieldsimportEnumclassMyProcess(models.Model):STATUS=Enum(('OK',0,_('Process is ok')),('PROBLEM',1,_('Process has problem')),('ERROR',2,_('Process is in error state')),)status=models.PositiveSmallIntegerField(default=STATUS.OK,choices=STATUS.choices,verbose_name=_("Process status"),)@propertydefstatus_text(self):returnself.STATUS[self.status]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在表被注释到配置之前获取表的元数据?   java滚动条不会出现在JList上   java JOGL监视器GPU内存   java为什么要使用RecyclerView onDraw延迟   java定制Oppo Reno 2 Z CPH1951(手机型号)的固件(闪存文件)   java自定义线程池执行器   java如何解决发布版本中重复的jar条目[com/安卓/volley/R.class]?   java如何使用Bukkit API触发事件?   java在blazemeter jmeter RTE插件中使用ctrl+w输入   C#/Visual Studio的java JDT等价物   java为什么当maxread值很大而收到的消息数量很小时,卡夫卡消费者会无限期消费?   java游戏2。x:包含模板列表的绑定模型   带压缩的java日志旋转   运行时。exec用java运行程序读取它正在做什么